среда, 7 мая 2008 г.

3. третий случай похожий. это тоже что-то вроде озарения, но не на пустом месте. тоже решение задачи. нужно было помочь брату сделать программу на C. я его немного знала, но она получилась сложнее и длиннее, чем я когда-либо делала. и был один элемент, который как-бы был сердцем всей истории. что-то типа процедуры для обхода дерева. почти любую структуру данных можно представить в виде бинарного дерева. и для работы с ней (поиска, и т.д.) обход просто необходим. а в си все это представлено довольно мудренно - указатели туда-сюда, просто кучу операций нужно делать, топчешься на одном месте. и я все думала, как бы это сделать покороче (мечта любого программиста:). и вот все себе мысленно представляла, как я обхожу дерево, как запрашиваю по указателю, как сравниваю. потом возвращаюсь, и опять делаю то же самое на другом уровне, и опять, и опять, - и вдруг поняла - это одна и та же функция, которая повторяется много раз на разных уровнях, т.е. она запрашивает сама себя! я так поразилась, что это так просто. функция которая вызывает сама себя! такой лист мебиуса в степени n :))) это было и слишком невероятно и слишком просто, чтобы быть правдой - ведь тогда вся процедура состояла бы всего из одной функции! (ну плюс еще 1-2 какие-то простые операции). ...Представьте себе мое блаженство, когда оказалось, что это работает :)

Комментариев нет: