3.13. Пример использования рекурсии: последовательность чисел Фибоначчи
Последовательность чисел Фибоначчи
0, 1, 1, 2, 3, 5, 8, 13, 21, ...
начинается с 0 и 1 и обладает тем свойством, что каждый последующий член последовательности представляет собой сумму двух предыдущих членов. Эта последовательность часто встречается в природе, в частности она описывает форму спирали. Отношение последовательных чисел Фибоначчи сходится к постоянному числу 1,618... Это число также часто встречается в природе и называется золотым сечением. Люди склонны рассматривать золотое сечение как источник эстетического наслаждения. Архитекторы часто проектируют окна, комнаты и здания так, что их длина и ширина находятся в отношении золотого сечения. В таком же отношении часто находятся длина и ширина почтовых открыток.
Последовательность Фибоначчи можно определить рекурсивно следующим образом:
fibonacci(0) = 0 fibonacci(l) = 1 fibonacci(n) = fibonacci(n - 1) + fibonacci(n - 2)
В программе, приведенной на рис. 3.15, i-e число Фибоначчи вычисляется рекурсивно с помощью функции fibonacci. Заметим, что числа Фибоначчи имеют тенденцию к быстрому росту. Поэтому в функции fibonacci мы выбрали тип unsigned long и для параметра, и для возвращаемого результата. На рис. 3.15 в примере вывода каждая пара строк соответствует одному прогону программы.
функции 209
// Рекурсивная функция вычисления числа Фибоначчи
#include <iostream.h>
unsigned long fibonacci(unsigned long);
main ()
unsigned long result, number;
cout « "Введите целое число: ";
cin » number;
result = fibonacci(number);
cout «"Число Фибоначчи("<< number<< ") = " « result « endl;
return 0;
// Рекурсивное описание функции fibonacci unsigned long fibonacci(unsigned long n)
if (n == 0 || n == 1)
return n; else
return fibonacci(n - 1) + fibonacci(n - 2); }
Введите целое число: 0 Число Фибоначчи (0) = 0
Введите целое число: 1 Число Фибоначчи (1) = 1
Введите целое число: 2 Число Фибоначчи (2) = 1
Введите целое число: 3 Число Фибоначчи (3) = 2
Введите целое число: 4 ',C Число Фибоначчи (4) = 3
Введите целое число: 5 Число Фибоначчи (5) = 5
R Введите целое число: 6 Число Фибоначчи (6) = 8
Введите целое число: 10 Число Фибоначчи (10) = 55
Введите целое число: 20 Число Фибоначчи (20) = 6765
Введите целое число: 30 Число Фибоначчи (30) = 832040
Введите целое число: 35
Число Фибоначчи (35) = 9227465
Рис. 3.15. Рекурсивная генерация чисел Фибоначчи
210
- 116 Глава 2
- 2.13. Основы повторения, управляемого счетчиком
- 2.14. Структура повторения for (цикл)
- 120 Глава 2
- 122 Глава 2
- 2.15. Пример использования структуры for
- 124 Глава 2
- 126 Глава 2
- 2.16. Структура множественного выбора switch
- Глава 2
- 130 Глава 2
- 132 Глава 2
- 2.17. Структура повторения do/while
- 134 Глава 2
- 2.18. Операторы break и continue
- Глава 2
- 2.19. Логические операции
- 138 Глава 2
- Глава 2
- 2.21. Заключение по структурному программированию
- IfcrpyKTypa (единственный выбор)
- Глава 2
- Глава 2
- 148 Глава 2
- Глава 2
- Глава 2
- Глава 2
- 156 Глава 2
- 158 Глава 2
- 160 Глава 2
- 2.1. А) следование, выбор и повторение, b) if/else. С) управляемым счет чиком или определенным заранее, d) Метку, сигнал, флаг или лож ный сигнал.
- 162 Глава 2
- 164 Глава 2
- 166 Глава 2
- 168 Глава 2
- 170 Глава 2
- 172 Глава 2
- 174 Глава 2
- 176 Глава 2
- 178 Глава 3
- Глава 3
- 3.3. Математические библиотечные функции
- 3.4. Функции
- Глава 3
- 3.5 Определения функций
- 184 Глава 3
- 186 ГлаваЗ
- 3.6. Прототипы функций
- 188 Глава 3
- 3.7. Заголовочные файлы
- 3.8. Генерация случайных чисел
- Глава 3
- 192 Глава 3
- 194 Глава 3
- 3.9. Пример: азартная игра
- Глава 3
- 198 Глава 3
- 3.10. Классы памяти
- 200 Глава 3
- 3.11. Правила, определяющие область действия
- 202 Глава 3
- 204 Глава 3
- 3.12 Рекурсия
- Глава 3
- 6) Значения, возвращаемые после каждого рекурсивного вызова
- 3.13. Пример использования рекурсии: последовательность чисел Фибоначчи
- Глава 3
- 3.14. Рекурсии или итерации
- 212 Глава 3
- Глава 3
- Глава 4
- Глава 5
- Глава 6
- 3.15. Функции с пустыми списками параметров
- 214 Глава 3
- 3.16. Встраиваемые функции