![]() |
![]() |
![]() |
|
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
|
||||
25
Cthulhu
10.02.09
✎
21:01
|
"у попа была собака..."
|
|||
26
NikVars
10.02.09
✎
21:09
|
(22) Это твое задание! Сам его формулируй, но с тематикой 1С!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |