斐波那契数列算法——递归与非递归
2017-11-06 16:01
387 查看
斐波那契数列:
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列: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*)
算法实现
1.递归实现(不考虑栈溢出)
思想:利用数学公式的定义,利用递归法实现斐波那契数列;当n<2时,返回1,当n>=2时,返回F(n-1)+F(n-2)的值
代码:
分析:这种算法的代码简洁,可读性高,但效率不高,当求第50个斐波那契数时,需要花费的时间很长;因此,我们利用非递归的算法求的斐波那契数列。
2.非递归实现
代码:
注:更多算法及其拓展请点链接剑指offer—010(斐波那契数列)
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列: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*)
算法实现
1.递归实现(不考虑栈溢出)
思想:利用数学公式的定义,利用递归法实现斐波那契数列;当n<2时,返回1,当n>=2时,返回F(n-1)+F(n-2)的值
代码:
int fib(int n) { if (n <= 2) return 1; else return fib(n - 1) + fib(n - 2); } int main() { int n = 0; printf("你要计算第几个菲波那切数列:>"); scanf("%d", &n); int ret = fib(n); printf("%d\n", ret); return 0; }
分析:这种算法的代码简洁,可读性高,但效率不高,当求第50个斐波那契数时,需要花费的时间很长;因此,我们利用非递归的算法求的斐波那契数列。
2.非递归实现
代码:
int fib(int n) { int a = 1; int b = 1; int c = 1; while (n > 2) { c = a + b; a = b; b = c; n--; } return c; } int main() { int n = 0; printf("你要计算第几个菲波那切数列:>"); scanf("%d", &n); int ret = fib(n); printf("%d\n", ret); return 0; }
注:更多算法及其拓展请点链接剑指offer—010(斐波那契数列)
相关文章推荐
- 斐波那契数列和二分查找的算法(递归与非递归)
- 斐波那契数列的递归实现和非递归实现
- python-Day4-迭代器-yield异步处理--装饰器--斐波那契--递归--二分算法--二维数组旋转90度--正则表达式
- 斐波那契数列之递归、循环
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)
- 斐波那契序列的递归和非递归的实现
- 算法(08):递归与非递归
- 关于二叉树宽度的算法包括递归和非递归
- 斐波那契数列公式算法-JS实现
- 如何用栈实现递归与非递归的转换(一)三种遍历树的算法
- 栈实现斐波那契数列递归过程的非递归模拟
- Python:斐波那契数列递归实现方法
- 斐波那契数列的最优算法(O(logN))
- 循环与递归及Fibonacci(斐波那契)数列解法
- 二叉树的遍历算法(递归和非递归)
- 斐波那契数列的递归改良
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)
- C语言斐波那契数列的四种实现方式—递归,迭代,数组,队列