尾递归实现斐波那契数列
Posted june0816
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尾递归实现斐波那契数列相关的知识,希望对你有一定的参考价值。
一、斐波那契数列
斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368......
二、递归算法
1. 代码
public int fib(int n){ if(n==1 || n==2){ return 1; } return fib(n-1)+fib(n-2); }
2. 缺点:多次计算重复的fib(n),性能低,一般只用于说明递归算法
三、改进:空间换时间,把计算出来的fib(n)存储起来,不用重复计算,空间复杂度O(n)
public int fib(int n){ int[] array=new int[n]; array[0]=1; array[1]=1; for(int i=2;i<n;i++){ array[i]=array[i-1]+array[i-2]; } return array[n-1]; }
四、再次改进,空间减少到O(1),只存储3个数:前两个数和前两个数相加计算出来的结果
public int fib(int n){ int first=1; int second=2; int third=3; for(int i=3;i<=n;i++){ third=first+second; first=second; second=third; } return third; }
五、尾递归
public int fib(int n,int first,int second){ if(n<=1){ return first; } rerurn fib(n-1,second,first+second); }
参考:
https://www.cnblogs.com/andy-songwei/p/11707142.html
以上是关于尾递归实现斐波那契数列的主要内容,如果未能解决你的问题,请参考以下文章
禅与计算机程序设计艺术使用 16 门编程语言实现斐波那契数列:循环控制指令与函数递归思想