波拉契尔数列 C++

题目:写一个函数,输入n, 求斐波那契数列的第n项。

f(n)=\left\{\begin{matrix} 0, n=0 & & & \\ 1, n=1& & & \\ f(n-1)+f(n-2),n>1& & & \end{matrix}\right.

分析:该题有两种实现方式递归或循环。当n比较大的时候f(n)结果也会比较大,故定义的时候可以采用long(int 也行)。递归会有大量的重复计算,而循环可以把f(n-1)和f(n-2)的值存起来,避免过多的重复计算。

上代码,先递归再循环。

#include<iostream>

#include<cstdlib>

#include <stdio.h>

#include<time.h>



long Fibonacci(unsigned int n)

{

if (n == 0)

return 0;

if (n == 1)

return 1;

return Fibonacci(n - 2) + Fibonacci(n - 1);

}



int main()

{

clock_t start, end;

int n = 40;

start = clock();

int result=Fibonacci(n);

end = clock();

double time = (end - start)/ CLOCKS_PER_SEC;

printf("%d %f", result,time);

system("pause");


}

输出结果为

 
  1. #include<iostream>
    
    #include <stdio.h>
    
    #include<time.h>
    
    
    
    long Fibonacci(unsigned int n)
    
    {
    
    if (n == 0)
    
    return 0;
    
    if (n == 1)
    
    return 1;
    
    
    long FibsubOne = 1;
    
    long FibsubTwo = 0;
    
    long Fib=0 ;
    
    int i = 2;
    
    while (i <= n)
    
    {
    
    Fib = FibsubOne + FibsubTwo;
    
    FibsubTwo = FibsubOne;
    
    FibsubOne = Fib;
    
    ++i;
    
    }
    
    return Fib;
    
    }
    
    
    
    int main()
    
    {
    
    clock_t start, end;
    
    int n =40;
    
    start = clock();
    
    int result=Fibonacci(n);
    
    end = clock();
    
    double time = (end - start)/ CLOCKS_PER_SEC;
    
    printf("%d %f", result,time);
    
    system("pause");
    
    
    }

结果显示

所以给各位初学者一个tips,虽然递归的代码真的很简洁,但是其效率比循环低很多,在很多时候并不推荐用递归。

猜你喜欢

转载自blog.csdn.net/summerlq/article/details/81543485