Цепная дробь как рекурсия или накопление
Одни и те же процедуры числителя и знаменателя могут управлять рекурсивным процессом сверху вниз или итеративным процессом от последнего члена.
Как порядок вычисления меняет процесс, не изменяя значение конечной дроби?
- Представление конечной цепной дроби через процедуры числителя и знаменателя
- Чтение нисходящего рекурсивного развертывания как отложенного деления
- Чтение восходящей итерации как полного накопленного результата
- Сравнение формы процесса при фиксированных глубине и членах
Рекурсивная версия начинается с члена 1, но не может завершить деление, пока не вернется остальная часть дроби. При каждом вызове сложение в знаменателе и деление остаются в ожидании, пока recur движется к k.
Итеративная версия начинается с члена k со значением 0.0 в качестве уже вычисленного хвоста. Каждый вызов заменяет result одним полным слоем дроби и движется к члену 1. В обоих примерах используются десять числителей и знаменателей, равных 1.0, поэтому они возвращают одинаковое конечное приближение к величине, обратной золотому сечению.
- Вывод
- —
- Значение
- —
- Диагностика
- —
Обе программы возвращают 0.6179775280898876 для десяти членов.
В рекурсивном запуске проследите за recur по направлению к k до того, как вернутся результаты деления. В итеративном запуске наблюдайте, как result становится одним полным суффиксом при каждом вызове по мере уменьшения i. Трассы выполнения фиксируют точно выбранные глубину и члены.
Измените программу и сравните результат.
Измените k с 10 на 5 в обеих программах. Предположите, совпадут ли результаты по-прежнему, и запишите новое конечное значение.
Показать подсказку
Оставьте числитель и знаменатель без изменений. Меньше становится только количество слоев дроби.