|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
12.03.2015, 22:19 | #1 |
t45t
Участник клуба
Регистрация: 20.03.2012
Сообщений: 1,849
|
Рекурсия, Си
Ребят, здравствуйте, много проболел, теперь не могу разобраться как работает рекурсия, вот код из лекции, если ввожу 8, то выводится, 21, проанализировав код получилось 13, почему именно 21?
Код:
from dark to light)
|
12.03.2015, 23:19 | #2 |
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
Ибо это число Фибоначчи..
Код:
|
13.03.2015, 01:37 | #3 |
t45t
Участник клуба
Регистрация: 20.03.2012
Сообщений: 1,849
|
сам принцип работы не понятен, ведь получается 8-1=7
8-2=6; 7+6=13, судя по коду
from dark to light)
|
13.03.2015, 02:33 | #4 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,322
|
rabbits(8) равно rabbits(7) + rabbits(6), а не 7 + 6.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
13.03.2015, 21:44 | #5 |
t45t
Участник клуба
Регистрация: 20.03.2012
Сообщений: 1,849
|
Не подумайте что стеб, но сколько раз эта функция вызовет сама себя? Ничего в рекурсии непонятно
from dark to light)
|
13.03.2015, 22:15 | #6 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,322
|
rabbits(8) = rabbits(7) + rabbits(6) = 13 + 8 = 21 (2 + 24 + 14 = 40 вызовов)
rabbits(7) = rabbits(6) + rabbits(5) = 8 + 5 = 13 (2 + 14 + 8 = 24 вызова) rabbits(6) = rabbits(5) + rabbits(4) = 5 + 3 = 8 (2 + 8 + 4 = 14 вызовов) rabbits(5) = rabbits(4) + rabbits(3) = 3 + 2 = 5 (2 + 4 + 2 = 8 вызовов) rabbits(4) = rabbits(3) + rabbits(2) = 2 + 1 = 3 (2 + 2 + 0 = 4 вызова) rabbits(3) = rabbits(2) + rabbits(1) = 1 + 1 = 2 (2 + 0 + 0 = 2 вызова) rabbits(2) = 1 (0 вызовов) rabbits(1) = 1 (0 вызовов) В скобках складываются два указанных вызова функции rabbits и сколько вызовов было сделано в этих вызовах. В rabbits(8) 40 вызовов, всего в программе 41 вызов функции rabbits (при i = 8).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
14.03.2015, 05:59 | #7 | ||
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Это не Фибоначчи, т.к. должно быть рекуррентное соотношение:
Цитата:
Цитата:
|
||
15.03.2015, 16:49 | #8 |
t45t
Участник клуба
Регистрация: 20.03.2012
Сообщений: 1,849
|
Какие нужно сделать поправки в коде, чтоб отследить что именно происходит на очередном вызове функции? (так, как написал BDA), пробовал так:
Код:
rrrFer Чем Вам форматирование моей самодеятельности не понравилось?) Препод дает лекции, мы записываем в тетрадку х)
from dark to light)
|
15.03.2015, 17:01 | #9 | ||
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Цитата:
Код:
Цитата:
Код:
Последний раз редактировалось Stilet; 15.03.2015 в 17:28. |
||
15.03.2015, 17:24 | #10 |
Форумчанин
Регистрация: 07.01.2014
Сообщений: 124
|
попробуйте так:
Код:
#define TRUE FALSE //счастливой отладки
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
рекурсия | Ника-Вероника | Паскаль, Turbo Pascal, PascalABC.NET | 6 | 23.03.2012 21:43 |
Рекурсия | unbanned | Паскаль, Turbo Pascal, PascalABC.NET | 7 | 19.01.2012 11:25 |
Рекурсия | dusya9992 | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 29.08.2010 14:14 |
Рекурсия | Solnze2 | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 09.06.2010 09:28 |
Рекурсия | Shadows_Behind | Помощь студентам | 6 | 26.05.2010 15:07 |