Дипломная работа: Финансовые функции и рекурсия
Выведенные соотношения для inv() позволяют записать такую программу для её вычисления:
Общее количество рекурсивных вызовов при счете по этой программе-функции можно было бы подсчитать с помощью следующей вспомогательной рекурсивной функции:
и оно действительно равно
Контрольные примеры.
Незначительная перестройка структуры функции inv(sum,p,n) позволяет получить еще один вариант её реализации, в котором количество рекурсивных вызовов в точности равно Сделать это можно так:
Замечание. В любых ситуациях, в которых возникают вопросы о быстродействии алгоритма, желательно по возможности минимизировать общее количество рекурсивных вызовов. В рассмотренной задаче построить алгоритм с рекурсивными вызовами можно было бы значительно проще, исходя из конечной формулы для решения задачи и дихотомии. Однако путь, который мы прошли, имеет свои достоинства. Он позволяет в общем случае выявить ограничения на рекурсивную функцию, достаточные для столь малого количества рекурсивных обращений при её вычислении. Фактически, из проведенных рассуждений вытекает такое утверждение.
Пусть функция F(a,n,v) удовлетворяет условиям:
F(a,1,v) =g(a,v),
F(a,n,v) =a×F(1,n,v),
F(a,n,v) =F(F(a,k,v),n-k,v) (1£k£n),
где a- действительное число, n- натуральное число, v=(v1,v2,…,vs) T- вектор с числовыми компонентами, g(a,v) - функция, значения которой для a и v из области определения F(a,n,v) мы вычислять можем. Тогда рекурсивная программа-функция:
вычисляет значение F(a,n,v) ровно за рекурсивных вызовов.
Доказательство этого факта с использованием свойств A, B и C можно провести так:
Отсюда, при n=2×k имеем
а при n=2×k+1 получаем
Именно на этих соотношениях и базируется алгоритм, реализуемый программой-функцией F(a,n,v).
И в заключение замечания приведем пример функции, удовлетворяющей условиям A, B и С: где в области определения функции f(v) её значения мы вычислят умеем.