斐波那契数的两种求法(迭代,递归)
**斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.’
了解到它的规律后,我们很简单的能想到两种做法:
1.递归
2.迭代
对于一个我们已经了解其规律的函数,我们用递归可以很简单的求出它的结果
利用上面的规律,我们可以设计一个函数,当求第0个的时候返回0,第1个的时候返回1,而当他求的n大于1时,F(N) = F(N - 1) + F(N - 2),我们可以让函数返回一个F(N - 1) + F(N - 2),既自己调用自己
class Solution {
public:int fib(int N) {int a=0,b=1,c=1;if( N==0)return 0;if( N==1 )return 1;if(N>1)return fib(N-1) + fib(N-2);
};
这样我们就利用递归将一个复杂的问题给简单化了,但是递归函数有一个致命的缺陷,就是它消耗了大量的内存与时间,当我们输入的N的值过大时,他会计算很长的时间才能给出答案,因为这个递归的算法的时间复杂度为O(n^2)
如果想要节省时间取得更高的效率,我们可以采用迭代的方法。
class Solution {
public:int fib(int N) {int a=0,b=1,c=1;if( N==0)return 0;if( N==1 )return 1;while(N-->1){c = a+b;a = b;b = c; }return c;}
};
我们分别用了a,b,c三个变量。c代表当前项的斐波那契数,a代表前两项的,b代表前一项,我们在每一次计算完后将b的值赋给a,将c的值赋给b,使得我们可以一项一项的算出斐波那契数。而使用迭代的算法虽然比递归难理解,但是我们将时间复杂度降到了O(n),大大的提高了效率
斐波那契数的两种求法(迭代,递归)相关推荐
- 斐波那契数的两种实现方式———1.递归实现,2迭代实现
对于斐波那契数,若是采用递归的算法,每个递归调用都将触发另外两个递归调用,而这两个中调用任意一个还会触发另外两个的调用.递归调用的时间复杂度O(2^N),空间复杂度为O(N),所以在计算略大的数会花费 ...
- 斐波拉契数的几种求法
斐波拉契数列求法的题目有: 509 斐波拉契 面试题10-1 斐波拉契数列 70 爬楼梯 解法一: 傻递归 public class Solution {public int fib(int N) { ...
- “斐波那契数列”的两种算法
"斐波那契数列"的两种算法 斐波那契数列有个规律:从第三个数开始,每个数是前两个数之和,比如: 1 1 2 3 5 8 13 21 34 55...... 现在通过两种方式(递归与 ...
- 递推公式斐波那契数列的几种求法
什么是递推公式 递推公式就是形如斐波那契数列那样,每一项都由前面几项运算求得 下面以斐波那契数列为例讲解递推公式的几种求解方法 斐波那契数列 斐波那契数列形式如下: F(n)={1n=11n=2F(n ...
- C语言斐波那契数列求和两种方法
递归调用函数: #define _CRT_SECURE_NO_WARNINGS int fun(int n); #include<stdio.h> int main() {//斐波那契数列 ...
- 斐波那契数列的两种解题方式
第一种方式:采用递归 def Fibonacci (n):if n==1 or n==2 : return 1else :return Fibonacci(n-2)+Fibonacci(n-1) ...
- 斐波那契 java_AcWing 717. 简单斐波那契(Java 两种写法)
递推 时空复杂度皆为O(N) import java.util.Scanner; public class Main{ static int N = 50; static int f[] = new ...
- 斐波那契数列的两种实现呢
//1.用递归实现function digui($n){if ($n <= 0) return 0; if ($n == 1) return 1; return digui($n - 2) + ...
- 斐波那契数列的两种实现思想
1 非递归 python def fbnq_2():a=0b=1n = input()for i in range(int(n)):c=a+ba=bb=cprint(a) fbnq_2() js fu ...
最新文章
- struts2 验证框架原理及实例
- BETA:由清华大学等多家研究机构联合提出的面向SSVEP-BCI应用程序的大型基准测试数据库...
- 熟练掌握HDFS的Shell访问
- Android短消息备份闪退,Android Socket发送信息时闪退
- 如何保证 Serverless 业务部署更新的一致性?
- 使用 SAP CDS view SQL Function 将视图某些字段进行合并
- 在落雨的鼓浪屿打着伞到处走走找个地方坐坐
- SpringMVC 环境搭建
- VB根据窗体自动调整窗体内控件大小 注:实用,可以直接引用
- 21天Jenkins打卡Day13视图
- [转载] java中final,finally,finalize三者的作用和区别
- 【读史笔记】《晋书·卫玠列传》
- 《IIS6下运行PHP的方法》
- 通信总线模块:RS485、SP3232
- Excel怎么批量删除开头文本
- 关于java Stream流将list集合分组之后与原list的集合的顺序不一致的问题
- 从全面了解高级计量经济学体系+stata实操+实证研究前沿+论文+大数据机器学习+空间计量......._Stata高级计量经济学 陈强
- Android播放音乐案例分享
- Asp.Net Web Api 部署------在云服务器IIS上部署Web Api程序
- OTT与IPTV的区别是什么?
热门文章
- 循环计算-02-0到100数字累加
- spring事务管理-Transaction模板(了解)
- mysql的主键有什么作用_mysql设置主键有什么用
- VMware Workstation Pro 16 安装教程
- 程序猿到了30岁以后,是如何把自己逼死的
- mysql5.7 solo web服务器
- Ixia张林辉:测试系统让SDN更“迷人”
- ImageServiceImpl加@Service注解
- nodeJS下利用mongdb进行数据库操作
- 【学习笔记11】动态方法调用和使用通配符定义action