Расчет изящных чисел Фибоначчи (двусторонняя рекуррентность)
Использование рекурсии для поиска чисел Фибоначчи – это стрельба из пушки по воробьям. Намного эффективнее рассчитывать подобные числа в цикле, рекуррентно. На рис. 6.12 представлена программа, по которой ищутся, если так можно выразиться, изящные (fine) числа Фибоначчи[25], где базой будут тройка, семерка[26] и туз (11). Следующим изящным числом Фибоначчи будет 21 (3+7+11, тоже красиво – вспомним знаменитую карточную игру). Предыдущим числом окажется 1 (11-7-3, опять неплохо, если принять во внимание, что сестра таланта не только краткость, но и простота). Остальные изящные числа Фибоначчи, пользуясь программой на рис. 6.12, рассчитать несложно – главное тут суметь дать им «изящное» толкование.
В программе на рис. 6.12 еще раз подчеркнуто, что размещение нескольких операторов на одной строке – это недокументированный прием. Если такая «упакованная» программа будет давать неверный результат, то фирма MathSoft за это ответственности не несет. Мы же будем считать такую программу «заархивированной» и не занимающей много места в книге. Такую программу при вводе в компьютер требуется «разархивировать».
Другой резон размещения нескольких операторов на одной строке лежит в сфере образования. Автор просит своих студентов операторы, не находящиеся в причинно-следственной связи, писать на одной строке – A
< 1 B
< 2, например. Оператор же, который опирается на предыдущий (предыдущие), следует писать внизу:
A < 1 B < 2 C < A + B |
Так можно имитировать параллельные вычисления на однопроцессорной машине: считается, что операторы на одной строке выполняются одновременно, а записанные столбиком – последовательно.
Задание читателям на закрепление пройденного: сделать программу на рис. 6.11 рекуррентной, а на рис. 6.12 – рекурсивной[27].