计算斐波那契数列

计算斐波那契数列算法的研究

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,
故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上, 斐波纳契数列以如下被以递归的方法定义:
F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)。
由斐波那契数列的数学公式我们可以很自然的想到用递归的思想的去实现,但我们可以借助递归调用树化递归为非递归算法。

递归算法实现:
int FibRe(int n)
{
if (n < = 1)
return n;
else
return FibRe(n-1)+FibRe(n-2);
}
算法的模型如下图递归树:




非递归做法如下,申请动态的空间来模拟递归运算的过程。
int Fib(int n)
{
int*  F = (int *)malloc(n*sizeof(int));//动态申请内存
int  FibResult = 0;
F[0]  = 0;
F[1]  = 1;
for(int i = 2; i <=n; i++)
F[i] = F[i-1] + F[i-2];
FibResult = F[n];//保存最后返回的结果
free(F);//释放动态申请内存
return FibResult ;
}
使用迭代法,不用动态申请空间的办法,
int FibEx(int n)
{
int Num1 = 1;
int Num2 = Num1;
int Num3 = Num1;
while(n > 2)
{
Num3 = Num2 + Num1;  //斐波那契数列的算法本质
Num1 = Num2;    //更新数据
Num2 = Num3;
n -- ;   
}
return Num3;
}
/*******尾递归,其本质就是类似于FibEx的迭代,该方法还多用了空间资源************/ 
int FibReEx(int n,int Num0,int Num1)
{
if(n == 0)
return Num0;//最后一层 
else
return FibReEx(n-1,Num1,Num0+Num1);  
}
上述代码是C语言,可以在CFree和VS等C语言IDE环境运行。运行结果都是一样的,但是上面算法没有做输入的检测,这里就只强调算法的思路,用户再去做自行的输入合理检测。总结上面算法,迭代方法的效率是最高的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值