递归和非递归方法实现斐波那契
来源:互联网 发布:暴风城先锋长戟数据 编辑:程序博客网 时间:2024/04/29 14:46
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci[1] )以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列: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*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。
斐波那契递归算法实现。
//递归实现斐波那契long long Fibonacci(int n){//if (n == 0 || n == 1)//return n;//else//return Fibonacci(n - 1) + Fibonacci(n - 2);return n < 2 ? n : Fibonacci(n - 1) + Fibonacci(n - 2);}
由于斐波那契递归算法时间复杂度:O(2^N)空间复杂度为:O(N),下面通过非递归实现斐波那契。
//非递归实现斐波那契-------时间复杂度O(n),空间复杂度O(n)long long Fibonacci(int n){long long *fibonacci = new long long[n + 1];//注意此处开辟n+1个空间fibonacci[0] = 0;fibonacci[1] = 1;for (int i = 2; i <= n; i++){fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2];}long long ret = fibonacci[n];delete[] fibonacci;return ret;}//非递归实现斐波那契--迭代法-------时间复杂度O(n),空间复杂度O(1)long long Fibonacci(int n){long long fibonacci[3] = { 0, 1, n };fibonacci[0] = 0;fibonacci[1] = 1;for (int i = 2; i <= n; i++){fibonacci[2] = fibonacci[1] + fibonacci[0];fibonacci[0] = fibonacci[1];fibonacci[1] = fibonacci[2];}return fibonacci[2];}//非递归实现斐波那契--迭代法-------空间复杂度O(n),时间复杂度O(1)long long Fibonacci(int n){long long result;long long pre_result;long long next_pre_result;next_pre_result = 0;pre_result = 1;result = 0;while (n > 0){next_pre_result = pre_result;pre_result = result;result = next_pre_result + pre_result;n--;}return result;}
本文出自 “Scen” 博客,请务必保留此出处http://10741357.blog.51cto.com/10731357/1758144
0 0
- 递归和非递归方法实现斐波那契
- 斐波那契数--递归和非递归实现
- 递归和非递归实现斐波那契数列
- 斐波那契数--递归和非递归实现
- 斐波那契数--递归和非递归实现
- 斐波那契序列的递归和非递归实现方法
- 递归和非递归方法实现斐波那契数列
- 斐波那契 非递归方法
- 斐波那契数列递归非递归实现
- 斐波那契函数js 递归方法 和非递归方法
- 斐波那契数列递归和非递归
- 斐波那契数列递归和非递归算法
- 斐波那契数列递归实现和非递归实现
- 斐波那契数列的递归实现和非递归实现
- 斐波那契数列的递归实现和非递归实现
- 斐波那契数列 递归和非递归 双重实现
- 斐波那契数列的递归和非递归实现
- 《数据结构、算法与应用》4.(递归和非递归实现斐波那契数列)
- 智能指针:模拟实现auto_ptr,scoped_ptr,shared_ptr
- 【C++】智能指针shared_ptr 定位删除器(仿函数)
- 浅析c++异常
- JavaAPI之Type接口
- 判断一个数是否为回文数,字符串是否为回文字符串
- 递归和非递归方法实现斐波那契
- 字符串中查找子串
- 实现大数四则运算
- 经典问题之最近点对问题
- 一个数组实现两个栈
- 迷宫问题
- 派生控件的处理。
- 使用两个栈实现一个队列
- 使用两个队列实现一个栈