斐波那契数列11
来源:互联网 发布:软件部门管理制度 编辑:程序博客网 时间:2024/06/16 05:36
递归和循环:
递归:是在一个函数的内部调用这个函数自身。
循环:是通过设置计算的初始值及终止条件,在一个范围内重复计算。
递归缺点:
- 函数调用的时间、空间消耗:每一次调用,都需要在内存栈里分配空间以保存函数参数、返回地址及临时变量。
- 递归中可能很多计算是重复的。
- 调用栈溢出:每个进程的栈的容量是有限的。若递归调用层级太多,就会超出栈的容量,导致栈溢出。
斐波那契数列
题目描述: 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。
Fibonacci定义如下:
f(n) = { 0 n=0;}
f(n) = { 1 n=1;}
f(n) = { f(n-1)+f(n-2) n>1;}
解题思路:递归效率低,使用迭代。从下往上计算,首先根据f(0)和f(1)算出f(2); 再根据f(1)和f(2)算出f(3), 依次计算, 主要是借助3个临时变量。
测试用例:
int main(){ //求10的斐波那契数列 int number = 10; std::cout << "Number's fibonacci is: " << Fibonacci(number); //Output: 55 return 0;}
Fibonacci函数实现:
long long Fibonacci(unsigned int n){ //无符号n //临时数组,如果n为0或1时,可直接返回处理 int result[2] = {0, 1}; if(n < 2) return result[n]; //三个临时变量 long long fibMinusOne = 1; //f(n-1) long long fibMinusTwo = 0; //f(n-2) long long fibN = 0; //f(n) for(auto i = 2; i <= n; ++i){ fibN = fibMinusOne + fibMinusTwo;//初始执行n=2的情况 fibMinusTwo = fibMinusOne; fibMinusOne = fibN; } return fibN;}
题目二:一只青蛙依次可以跳上1级台阶, 也可以跳上2级。求青蛙跳上一个n级的台阶总共有多少种跳法。
解题思路:实际上这是一个Fibonacci数列的例子, 使用公式f(n) = f(n-1) + f(n-2)便可求出跳一个n级的台阶有多少种跳法。
0 0
- 斐波那契数列数列计算
- 【程序11】斐波那契数列
- 斐波那契数列11
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- leetcode:binary-tree-preorder-traversal
- synchronized
- 线程中CreateEvent和SetEvent及WaitForSingleObject的用法
- android studio does not point to jvm installation
- 使用svn的合理姿势
- 斐波那契数列11
- LeetCode-337.House Robber III
- 13.6 线程的生命周期状态,线程常用的方法
- <1> perl概述
- KMP字符串匹配
- 基于Python的接口测试框架
- Spark学习15之用Maven编译时报 java.lang.OutOfMemoryError: PermGen space异常
- js中undefined,null,NaN的区别
- 有向路径检查