875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
|
|||||||||||
1 | |||||||||||
Числа фибоначчи. Не понятно почему выбраны числа 1 и 213.10.2017, 21:15. Показов 2015. Ответов 16
Метки нет (Все метки)
Есть код фибоначчи:
Как это работает мне понятно. Передаем число в функцию, относительно которого нужно получить число по принципу фибоначчи. Упираемся в единички и нули а далее прекращается рекурсия и единички/нули всех вызовов складываются. Но не понятно почему выбраны именно следующие вычисления n - 2 и n - 1. Почему не n-5 например? Не получается уловить общую суть. С точки зрения вычислений все ясно. Но с логической точки зрения не понятно. Допустим код выше для числа 6 выводит 8. Единственный вариант который пришел в голову по поводу (n - 2) + (n - 1) это получение двух предыдущих чисел от переданного числа. Давайте считать.(6 - 2) + (6 - 1) = (4 + 5) = 9 но никак не 8. Отсюда возникает вопрос, что происходит на самом деле? Добавлено через 24 минуты По логике подходит следующее:
0
|
13.10.2017, 21:15 | |
Ответы с готовыми решениями:
16
Почему вычисление числа Фибоначчи с помощью рекурсии медленнее, чем без нее? Из отрезка [0; 3] наугад выбраны два числа x и y Процедура в теории создает файл и записывает в него числа Фибоначчи ,но у меня почему что не получается Записать в ряд все числа Фибоначчи, не превосходящие целого положительного числа n |
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
|
||||||
13.10.2017, 21:17 | 2 | |||||
0
|
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
|
|
13.10.2017, 21:25 [ТС] | 3 |
afront,
Посмотрел... а можно словами?
0
|
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
|
|
13.10.2017, 21:51 [ТС] | 5 |
Байт,
Да, разные. Вот я пытаюсь просто разобраться почему именно n - 2 и n - 1. В чем заключается логика...)
0
|
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
|
|
13.10.2017, 22:03 | 7 |
сама последовательность выглядит так: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
рекурсия же возвращается от вашего числа N к самым первым элементам последовательности, а потом их суммирует в восходящем порядке.
0
|
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
|
|
13.10.2017, 22:22 [ТС] | 8 |
Байт,
mat_for_c, То, что вы сказали я понимаю и сам писал об этом в первом сообщении Вопрос был немного другой
0
|
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
|
||||||
13.10.2017, 22:40 | 9 | |||||
ваша логика соответствует этому коду:
1
|
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
|
|
13.10.2017, 22:50 [ТС] | 10 |
mat_for_c,
Да, вы правы. В функцию мы передаём количество чисел, которое нужно вывести используя рекурсию. Ок с этим разобрались. Но какова логика вычисления? На чем она основана? Вот пришло в функцию 6, то есть хотим выстроить последовательность из 6 чисел. Почему выбраны именно эти числа n-1 и n-2? Что это даёт? Дерево вызовов я уже смотрел. Не методом "тыка" же подобраны эти числа? Вот мне интересно на чем основан выбор этих чисел при рекурсивных вызовах.
0
|
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
|
|
13.10.2017, 23:07 | 11 |
Байт вам это уже написал: - рекуррентная формула чисел Фибоначчи
вызов fibonacci(N) соответствует , а дальше все понятно, откуда берется fibonacci(N-1) и fibonacci(N-2)
0
|
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
|
|
13.10.2017, 23:58 [ТС] | 12 |
mat_for_c,
В том то и дело что не понятно. Может быть у вас математический уклон поэтому вам и понятно... Но в моем случае это не так. Не могу понять на чем основан выбор чисел n - 1 и n - 2 для рекурсивных вызовов и как эти цифры связаны с количеством чисел в результирующем наборе (т.е с аргументом функции). тот кто писал эту функцию наверное сделал сначала вывод основываясь на чем то конкретном а потом уже ему стало "понятно" и была написана такая функция... Вот именно это и интересует. Интересует основание, исходя из которого можно сделать вывод об оптимальности данных операций для рекурсивного решения. Добавлено через 1 минуту Сначала думаю была идея а потом формула а не наоборот...
0
|
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
|
|
14.10.2017, 00:29 | 13 |
просто примите факт того, что каждое последующее
n-ное число равно сумме двух предыдущих чисел, n-1 и n-2 - это как раз их номера.0; 1; 0 + 1 = 1; 1 + 1 = 2; 1 + 2 = 3; 2 + 3 = 5; 3 + 5 = 8; 5 + 8 = 13; и т.д.
1
|
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
|
|
14.10.2017, 00:45 [ТС] | 14 |
mat_for_c,
Возможно я уже надоел, но реально не понятно... Вот есть входящее число 6 которое определяет количество чисел в результирующей последовательности. 1) Не получается уловить то, как связано количество нужных чисел в результирующем наборе и само вычисление. 2) Можно конечно тупо "знать" что это работает, потому что есть такая формула... но понимания при этом не будет... 6 - 1 это первое число которое идёт перед 6, 6 - 2 это второе число которое находится перед 6. Итого получаем 4 5 и 6. (При первом вызове). Но это два предыдущих числа относительно исходного числа 6, которое определяет количество чисел в результирующем наборе. А фибоначчи подразумевает то, что каждое число равно сумме двух предыдущих чисел. При 4 5 и 6 к которому я пришёл выше, вместо 6 должно быть 9 т.к сумма двух предыдущих чисел равна 9. Значит это вычисление не имеет прямого отношения к Фибоначчи, ну не похоже ни разу. Не понимаю что стоит за этим самым "спуском до единичек" и их суммированием. Ведь кто то просчитал какое дерево должно получиться и что единички как раз будут в том количестве что бы выдать правильный результат... Но как он это просчитал? Вот основной вопрос... Пока не могу додуматься Добавлено через 3 минуты Возможно тут какой то простой нюанс который просто ускользнул от меня....
0
|
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
|
||||||
14.10.2017, 01:18 | 15 | |||||
вы опять возвращаетесь к своей логике
fibonacci(6) - это соответствует , где 6 - это номер числа в последовательности, а не просто число 6 из множества натуральных чисел.имеем: вот ваша рекурсия для шестого числа фибоначчи
1
|
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
14.10.2017, 08:54 | 16 |
Чтобы понять рекурсию, нужно понять рекурсию ...
Думаю, ничего он не считал. Он просто познал дао рекурсии. А если серьёзно, то для меня прелесть рекурсии в том и состоит, что можно не думать о том как именно будут разворачиваться рекурсивные вызовы на низком уровне. Достаточно написать рекурсивную формулу и граничные значения, основываясь на математическом описании задачи. А остальное за нас сделает компилятор. Как именно сделает - это его проблемы, но если мы правильно перенесли математические формулы на язык С++, то результат обязательно будет верным. Другое дело, если нам важна оптимальность - в этом случае знание деталей реализации действительно может быть полезным. Но это уже тема для отдельного разговора.
1
|
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
|
|
14.10.2017, 10:30 [ТС] | 17 |
mat_for_c,
Номер числа какой последовательности? Например когда считается Фибоначчи для 6, в результирующей последовательности это число отсутствует Добавлено через 1 минуту Ааа сори понял. Речь идет о последовательности Фибоначчи. Совсем запутался... Спасибо
0
|
14.10.2017, 10:30 | |
14.10.2017, 10:30 | |
Помогаю со студенческими работами здесь
17
Вывести на экран все числа, номера которых есть числа Фибоначчи В типизированный файл занести числа Фибоначчи, не превосходящие заданного числа N Составьте программу, позволяющую найти все числа Фибоначчи, меньшие заданного числа N Составьте программу, позволяющую найти все числа Фибоначчи, меньшие заданного числа N Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |