一、斐波那契数列
在这本书的第7章 7.5.2 ,也就是第132~134页这里介绍了两种解法。不难理解,但是又容易忘记,所以在这里做个笔记,加深印象,也便于查询。
第一种是用递归调用函数的方法,比较容易理解,代码写得也相对更简单一点。但是运行起来消耗资源过大,书中介绍相对第二种迭代的解法,资源消耗高了几十万倍(越到后面)。这是什么原因呢?
我们先来看一下第一种解法:
long fibonacci(int n)
{
if(n <= 2)
return 1;
else
return fibonacci(n - 1)+ fibonacci(n - 2);
}
这种解法的主要问题是,当调用factorial(n-1)的时候,原来函数里面的变量n还是存在的,占用内存。所以当调用的层级越来越高的时候,变量占用的内存以 2 的 n次方增长。并且由于前一个 n-1等于后一个n-2,所以还存在大量重复计算,所以程序运行消耗资源非常大。
第二种解法:
long fibonacci(int n)
{
long result;
long previous_result;
long next_older_result
result = previous_result = 1 //对应数列前两个值 1, 1 ,
while( n > 2 ) {
n -= 1;
next_older_result = previous_result;
previ