Имя: Пароль:
1C
 
v7: рекурсия
0 Новичок
 
10.02.09
17:29
Добрый день всем! Самостоятельно изучаю1С по книге Т.Н. Усикова 1С Эффективное программирование. Книга мне нравится, всё достаточно разложено, но есть некоторые моменты, которые не понимаю. В частности даётся  определение рекурсии в качестве примера – небольшая программка, производящая вычисление n-ого по счёту числа Фибоначчи (стр. 212 книги):

Перем фибоначчи;
   //*************************************************
   Функция фиб(номер)
       Если (номер=0) или (номер=1) Тогда
           ф=1; //первые 2 числа равны 1
           Возврат ф;
       Иначе
           ф=фиб(номер-2)+фиб(номер-1);
           Возврат ф;
       КонецЕсли;
   КонецФункции
   //*****************************
   ном=1;
   фибоначчи=1;

Далее предлагается самому разобраться в алгоритме программы, что никак не могу сделать. Если кому не затруднительно, помогите разобраться. Вот, например, вводим число 4. Что происходит? Как работает программа?
1 ДенисЧ
 
10.02.09
17:30
мда...

А может, не надо учиться?
2 Ёпрст
 
гуру
10.02.09
17:31
Идёт рекурсивный вызов функции ..
А что там непонятного ?
Можешь открыть код в отладчике и "побегать"..Только и так вроде всё очевидно.
3 Господин ПЖ
 
10.02.09
17:31
отладчик начинают давать после 212 стр?
4 Скользящий
 
10.02.09
17:33
у человека не с программированием проблемы, а с математикой.
5 СноваЗдорова
 
10.02.09
17:33
ф=фиб(номер-2)+фиб(номер-1);

Здесь функция вызывает саму себя дважды: фиб(номер-2) и фиб(номер-1).
6 СноваЗдорова
 
10.02.09
17:34
так собственно и работает... =))
7 ВедущийП
 
10.02.09
17:34
(0) Интересно о чем шла речь на предыдущих 211 страницах, боюсь предположить...
8 Deon
 
10.02.09
17:34
Да, пример хреновый. Для понимания ситуёвины можно было оставить и один вызов
9 Deon
 
10.02.09
17:38
(0) ну чё, до сих пор не понял?
10 PRADA
 
10.02.09
17:45
Да уж! По 1С изучать математику и алгоритмизацию)))

Уважаемый:

при: номер=4;
У вас будет: ф=фиб(2)+фиб(3);
Что естественно вызовет функцию фиб(номер) еще раз, но уже номер=2 и номер=3, что в свою очередь вызовет функцию фиб(номер) еще раз... и еще раз... и еще...
Что в общем называется рекурсивный вызов функции) вот и всё

КАРАНДАШ и БУМАГА Вам в помощь!
11 Greeen
 
10.02.09
17:53
12 NikVars
 
10.02.09
17:58
(0) Пропусти рекурсию... Это фу!
Рекурсия в плане счетов - это вредно для баланса!
13 rie
 
10.02.09
18:01
(12) Ну почему же?
Пример очень хорошо показывает, как _не надо_ писать рекурсивные подпрограммы.
Если бы далее шёл пример, как их _надо_ писать - ценность книги бы резко возрасла.
14 rie
 
10.02.09
18:04
(0) Автор неправильно назвал книгу.
Этот пример демонстрирует приёмы максимально неэффективного программирования.
15 Irbis
 
10.02.09
18:08
(0) "Чтобы понять что такое рекурсия, надо понять что такое рекурсия" ©
16 Новичок
 
10.02.09
18:52
Всё разобрался, взял карандаш с листком, расписал -всё получилось.
А вообще есть ли форумы по 1С с категориями -Для начинающих, для новичков? Если есть киньте ссылочку пожалуйста.
А то лазеешь, такое впечатление, что везде только профи с профи разговаривают, а новичком то из них никто никогда и не был.
17 rie
 
10.02.09
19:03
(16) Если новичок будет разговаривать только с новичками - он так на всю жизнь новичком и останется.

Что касается данного примера - попробуй оценить, сколько времени будет вычислять число Фибоначчи приведенная тобой функция.

И сравни со временем выполнения другого варианта функции

Функция Фиб1(а,б,ном)
   Если ном=0 Тогда
       Возврат а;
   ИначеЕсли ном=1 Тогда
       Возврат б;
   Иначе
       Возврат Фиб1(б,а+б,ном-1);
   КонецЕсли;
КонецФункции

Тоже рекурсивная функция, тоже вычисляет числа Фибоначчи, разве что вызывается не Фиб(n), а Фиб1(1,1,n). Но работает на порядок быстрее.

И пойми, что и программирование, и 1С, и рекурсию лучше изучать по более другим книгам.
18 ZOMI
 
10.02.09
19:34
Этот хоть по книжкам.Многие вопиющие о помощи здесь кадры сразу на живых базах.
19 Скользящий
 
10.02.09
19:38
(16) Это тут.
20 rie
 
10.02.09
19:47
(18) На живых базах - сильно способствует естественному отбору :-)
21 NikVars
 
10.02.09
20:26
(16) Не благодарная молодежь... Тут до тебя академики 1С, зубры 1С, титаны 1С снизошли и занимаются благотварительностью...
А ты...
Дополнительное задание по рекурсии:
Написать внешнюю компоненту, а в ней функцию-рекурсию и потом подключить эту компоненту к безе 1С и вызвать из 1С функцию-рекурсию из внешней компоненты.
22 quest
 
10.02.09
20:33
а еще лучше - скачай и прочитай sicp Мозг прочистит
23 acsent
 
10.02.09
20:43
(0) Что бы понять рекурсию, нужно понять рекурсию (с)
24 ZOMI
 
10.02.09
20:59
v7: рекурсия

вот это и есть рекурсия
25 Cthulhu
 
10.02.09
21:01
"у попа была собака..."
26 NikVars
 
10.02.09
21:09
(22) Это твое задание! Сам его формулируй, но с тематикой 1С!