【面试题】剑指offer09--递归法和非递归法斐波那契数列的第n个数
2017-06-14 10:57
239 查看
斐波那契数列指的是这样一个数列
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597
求一个斐波那契数列的第几个数:
第一个方法是使用递归的方法:
求第n个数字时,先求出 第n-1的个数字,再求出第n-2个数字,依次往下推
但是这样的话,效率太低,因为会有很多重复的,例如求第8个数字,课画出图如下:
代码实现:
用非递归法求解:从最前面往后求解:
如下图:
代码实现:
运行结果:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597
求一个斐波那契数列的第几个数:
第一个方法是使用递归的方法:
求第n个数字时,先求出 第n-1的个数字,再求出第n-2个数字,依次往下推
但是这样的话,效率太低,因为会有很多重复的,例如求第8个数字,课画出图如下:
代码实现:
//Q1:写一个函数,求斐波那契是咧的第n项 #include<iostream> using namespace std; long long Finonacci(int n) { if (n <= 0) { return 0; } if (n == 1) { return 1; } return Finonacci(n - 1) + Finonacci(n - 2); } int main() { int n = 0; int result = 0; cout << "请输入一个数字:"; cin >> n; result = Finonacci(n); cout << "递归法:求第" << n << "个斐波那契数为:" << result << endl; system("pause"); return 0; }运行结果:
用非递归法求解:从最前面往后求解:
如下图:
代码实现:
//Q1:写一个函数,求斐波那契是咧的第n项 #include<iostream> using namespace std; long long Finonacci(int n) { int arr[2] = { 0, 1 }; if (n < 2) { return arr ; } long FibOne = 1; long FibTwo = 0; long Fib = 0; for (unsigned int i = 2; i <= n;i++) { Fib = FibTwo + FibOne; FibTwo = FibOne; FibOne = Fib; } return Fib; } int main() { int n = 0; int result = 0; cout << "请输入一个数字:"; cin >> n; result = Finonacci(n); cout <<"非递归法:求第"<<n<<"个斐波那契数为:"<<result << endl; system("pause"); return 0; }
运行结果:
相关文章推荐
- 【剑指offer】面试题9:斐波那契数列
- 求斐波那契数列的第n个数(递归、非递归)
- 剑指offer——面试题9:斐波那契数列
- 面试题09_斐波那契数列及其变种详解——剑指offer系列
- 剑指Offer面试题9斐波那契数列
- 面试题斐波那契数列
- 剑指offer面试题9 斐波那契数列
- 斐波那契数列 求第n个数、前n个数之和
- 面试题9:斐波那契数列
- 《剑指offer》面试题9:斐波那契数列
- 剑指offer:面试题9,斐波那契数列
- 递归法求斐波那契数列(C语言版)
- 剑指offer-面试题9:斐波那契数列
- 剑指offer_面试题9_斐波那契数列
- 海涛老师的面试题-作业9-也谈斐波那契数列
- 剑指offer--面试题10:斐波那契数列
- Java中斐波那契数列相关面试题
- 19.递归法和非递归法反转链表[ReverseLinkedList]
- 剑指offer-chapter2-面试题9-斐波那契数列(java)
- 《剑指Offer》学习笔记--面试题9:斐波那契数列