斐波拉契数列

斐波拉契数列:

1    1    2    3    5    8    13    21    34......

其中每一个数字都是前两个数字的和。

递归计算:

long Fibonacci(int n)
{
	if(n>2)
		return Fibonacci(n-1)+Fibonacci(n-2);
	else
		return 1;
}

非递归计算:

long Fibonacci(int n) 
{ 
    long result; 
    long prev_result; 
    long next_result;

    result = prev_result = 1;

    while (n > 2) 
    { 
        n--; 
        next_result = prev_result; 
        prev_result = result;

        result = prev_result + next_result; 
    }

    return result;    
}

递归实现存在的问题

    这个函数的递归实现使用了双重递归(double recursion),函数对本身进行了两次调用。

    假设调用Fibonacci(40)。第1级会创建变量n。接着调用了两次次Fibonacci(),第2级递归又会创建两个变量n。上述的两次调用中的每一次又进行了两次调用,而在第三级调用中需要4个变量n,这时总数为7。因为每级调用需要的变量数是上一级变量数的2倍,所以变量的个数是指数增长的。指数增长的变量会占用大量的内存,这可能会耗尽系统的资源。

你可能感兴趣的:(编程练习)