najas: (Pandora)
[personal profile] najas
Идея рекурсии упорно не лезет мне в голову.
Не, определение я выучила и все слова в нем понимаю, но применять метод могу с большим трудом, и, когда надо решить задачу, думаю о нем только в последнюю очередь, и то, обычно, безуспешно. Мне и в жизни не близка идея копать вглубь "от забора до обеда". Гораздо больше нравятся "циклы", когда мы делаем определенное число шагов, и каждый шаг приближает к светлому будущему намеченной цели.

Date: 2011-02-12 01:12 pm (UTC)
From: [identity profile] http://users.livejournal.com/ok_/
Любой рекурсивный алгоритм можно реализовать циклами. Нет ли тут глубокого философского смысла?))

Date: 2011-02-12 01:34 pm (UTC)
From: [identity profile] nasse.livejournal.com
Рекурсия - дейстивтельно тяжелая для постижения штука.

Помнится, когда я ее осваивала, мне было ценно осознать, что цикл - это "взгляд сверху", а рекурсия - "взгляд изнутри". И еще важно понимать, что ты знаешь о своем текущем состоянии на каждом шаге, какими свойствами обладает последний шаг и где хранится то, что ты знаешь о предыдущих шагах.

Date: 2011-02-12 02:25 pm (UTC)
From: [identity profile] ktchesla.livejournal.com
Ужас, Настя!!! Я прочитала определение в Википедии, поняла все очень смутно, видимо, ты программируешь и для этого тебе эта ре... нужна. Короче, сочувствую! А что именно ты программируешь?

Date: 2011-02-12 07:07 pm (UTC)
From: [identity profile] najas.livejournal.com
Стопудов! Кстати, о философии, как ты сегодня? А то Петр Николаевич с утра недужили, съел лишнюю шоколадку, не иначе...

Date: 2011-02-12 07:10 pm (UTC)
From: [identity profile] najas.livejournal.com
Вот мне не нравится "взгляд изнутри". Как только я нахожу себя "изнутри", я начинаю стенать "идея... идея!. идея нахожусь?!" и рваться прочь из окопа.

Date: 2011-02-12 07:11 pm (UTC)
From: [identity profile] najas.livejournal.com
Я пока пишу себе скрипты для анализа своих данных, так, по мелочи, а параллельно пытаюсь превзойти MIT-шный курс Introduction to Computer Science.

Date: 2011-02-12 11:36 pm (UTC)
From: [identity profile] http://users.livejournal.com/ok_/
Наверняка! Мы там еще сгущенки навернули, помнится))
From: [identity profile] dennyrolling.livejournal.com
мне кажется самое простое объяснение рекурсии - это "мы что-то делаем, и потом приводим задачу к такой-же или нескольким таким-же, их мы решаем тем же способом".

например обход дерева который печатает все узлы (у каждого узла есть левый и правый):
Обойти_Дерево(узел){
если узел не пуст {
    Обойти_Дерево(узел.левый)
    напечатать(узел)
    Обойти_Дерево(узел.правый)
}
}


тут мы нашли две подзадачи (обойти левый и правый узел) и собственно задачу которую мы решаем это печатанье. окончание рекурсии гарантируется условием "узел не пуст"

с циклом мне кажется очень трудно решить такую задачку.

и еще шутка про рекурсию:

(выписка из расписания колледжа)
Title                   Prereq.
CS204 C++               CS103, CS108
CS213 Recursion         CS213 
CS223 Database systems  CS103, CS202

Date: 2011-02-13 06:13 am (UTC)
From: [identity profile] ktchesla.livejournal.com
ого, ты крута!

Date: 2011-02-13 10:08 am (UTC)
From: [identity profile] najas.livejournal.com
Сгущенка, наверняка :)))

Date: 2011-02-13 10:09 am (UTC)
From: [identity profile] najas.livejournal.com
Пока еще не очень крута.
From: [identity profile] najas.livejournal.com
Не, определение-то я понимаю, применять его плохо получается.

Да, дерево действительно легко обойти рекурсией. Я забыла, мы же в дереве не знаем, сколько у нас узлов, да?

Расписание смешное :)))
From: [identity profile] dennyrolling.livejournal.com
про дерево знание того сколько узлов помогает несущественно, они же расположены могу быть по разному.

мне кажется надо просто нарешать много задач, но мне уже тяжело конечно это вспомнить.

есть игрушка на использование рекурсии, я как-то провел много долгих зимних вечеров: http://www.robozzle.com/
там очень простой графический язык программирования и нет никаких переменных, поэтому только рекурсией и приходится обходиться (часто, правда, бесконечной).
From: [identity profile] najas.livejournal.com
Спасибо огромное за ссылку! буду развлекаться :)

Date: 2011-02-13 09:02 pm (UTC)
From: [identity profile] potan.livejournal.com
Только при наличии операции аллакации. Например функция Аккермана к простым циклам не сводится.

Date: 2011-02-13 09:17 pm (UTC)
From: [identity profile] potan.livejournal.com
Что бы понять рекурсию, надо понять рекурсию...

Лично у меня рекурсия проблем не вызвала. Но сталкнулся с очень сильным неприятием рекурсии у разработчиков электроники.
Может быть поможет изучение реализации рекурсии без рекурсии в лямбда-исчислении (через Y-комбинатор) и медитация над ленивыми списками языка Haskell, типа чисел Фибаначчи: fib = 1:1:(zipWith (+) fib (tail fib)).
Может стоит ознакомиться с контекстно-свободными граматиками Хомского - там идея рекурсии достаточно наглядна.

Еще рекомендую Гёдель, Эшер, Бах: эта бесконечная гирлянда и, повторюсь - SICP. :-)

Date: 2011-02-14 08:36 am (UTC)
From: [identity profile] cmike.livejournal.com
операции аллакации
Чтойта? ;)

Date: 2011-02-14 08:45 am (UTC)
From: [identity profile] potan.livejournal.com
malloc в C, new в C++.

И не надо к орфографии придираться - правила написания заимствованных слов в школе нас не учили.

Date: 2011-02-14 08:57 am (UTC)
From: [identity profile] cmike.livejournal.com
Рекурсивный алгоритм поедания сала: отрезать небольшой кусочек так, чтобы никто не заметил, повторить процедуру. ;)

На самом деле шутка в том, что любые задачи можно сводить к таким же, но менее сложным задачам (например, задача для дерева с n вершинами сводится к задачам для деревьев с меньшем числом вершин). Наиболее естественно получается с объектами, изначально заданными рекурсивно (например, с деревом: (бинарное) дерево — это либо одиночная вершина, либо вершина, к которой присоединены левое поддерево и правое поддерево). Для других задач могут потребоваться технические ухищрения.

А вот думать над тем, как это делает компьютер, не надо (точнее, можно, но потом). Просто задайтесь вопросом "а как эту задачу свести к более простой (т.е. меньшего размера)".
Page generated Jan. 16th, 2026 06:33 pm
Powered by Dreamwidth Studios