Java 菲波那切数列之递归迭代算法求值
斐波那契数列,又称黄金分割数列,以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、55 、……
数列从第3项开始,每一项都等于前两项之和。
求该数列的第N项数值
1.递归方法
递归重要的规则:当满足一定条件时 需要终止递归调用。否则陷入调用死循环
此数列 当x=1 或 x=2 时 可以当做满足 跳出递归条件
1 | //x 表示第几个数 |
代码如下:
1 | publix static int t1(){ |
2.迭代方法
如:
1 1 2 3 5 8 m n result=m+n
1 result = m+n = 0+1 可以看做 0 + 1
2 result = m+n = 1+1
3 result= m+n 1+2
5 result =m+n 2+3
8 result = m+ n 3+5
…..
可以看出 当前组数m的值 是上一组数的n;上一组数的 result 是下一组数的n
即 如果result代表当前项的斐波那契数,m代表前两项的,n代表前一项,我们在每一次计算完后将n的值赋给m,
将result的值赋给n,使得我们可以一项一项的算出斐波那契数
1 | publix static int t2(){ |
运行效率比较:
递归效率慢 它会消耗了大量的内存与时间,当参数值过大时, 会计算很长的时间
迭代求值效率快
测试:
1 | StopWatch time = new StopWatch(); |
测试结果:
6765
6765
StopWatch ‘’: running time = 489800 ns
ns % Task name
000463500 095% t1
000026300 005% t2
结果纳秒统计 效率 t2迭代方法 比t1递归快的多
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 KeJiu!






