既然已经知道斐波那契数列的递推公式,那么很容易就给出一个递归函数的版本,因为涉及到大数,我们可以采用Python来描述,本文后续主要采用Python:
def f(n):
if...我们用Python来计算一下数列的前40项:
print(map(f, range(1,41)))
运行好慢啊,我的机器上运行了1分多钟才出来了结果
[1, 1, 2, 3, 5, 8, 13,...带缓存的递归
我们发现上面计算f(5)的递归计算的树里,f(3)是重复展开计算了。从而推断,之所以树递归计算规模这么大,原因就在于出现了大量的重复计算。
...每一项的产生在是相互关联的,而我们之前用Python里的map函数生成数列的前40项,过程中每次调用f都是孤立的。
原来,如果我们的目的是生成斐波那契数列的前n项,刚才写黑板的算法就已经非常棒。...我们可以构造一个算子mul_f来计算两个函数的积,然后通过mul_f算子来构造exp_f算子来计算函数的幂。
那么我们求数列第2项之后的第n项就相当于T变换的n-2次幂作用于(1,1)。