波拉契尔数列 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,虽然递归的代码真的很简洁,但是其效率比循环低很多,在很多时候并不推荐用递归。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值