斐波那契数列 递归 尾递归 递推 C++实现

==================================声明==================================

本文原创,转载请注明作者和出处,并保证文章的完整性(包括本声明)。

本文不定期修改完善,为保证内容正确,建议移步原文处阅读。

本文链接:http://www.cnblogs.com/wlsandwho/p/4205524.html

======================================================================

闲来不想做事,刷了个网页,看到乱七八糟的东西就不自觉的扩展下,这坏毛病改不了了,又浪费了好多刷贴吧的时间。

======================================================================

随手写了个小代码,感觉写起来很简单,但是对于退出条件是“1”还是“2”,是“<=”还是“<”,却是比较蛋疼的。

人老了就不愿意多动脑,自己推导就算了吧,我下面的代码靠编译调试确定了下,没有问题。

估计哪次让我现场在纸上写一个,就抓虾了。

======================================================================

要理论的话,请自行翻阅《数据结构与算法分析 c语言描述》和《算法导论》,我就贴个代码,请勿吐槽。

======================================================================

递归

 1 #include <Windows.h>
 2 #include <iostream>
 3
 4 using namespace  std;
 5
 6 LONG Fibonacci(LONG lN)
 7 {
 8     if (lN<2)
 9     {
10         return lN;
11     }
12
13     return Fibonacci(lN-1)+Fibonacci(lN-2);
14 }
15
16 int main()
17 {
18     LONG lS=Fibonacci(40);
19
20     return 0;
21 }

尾递归

 1 #include <Windows.h>
 2 #include <iostream>
 3
 4 using namespace  std;
 5
 6 LONG Fibonacci(LONG lN,LONG lA=1,LONG lB=1)
 7 {
 8     if (lN==2||lN==1)
 9     {
10         return lB;
11     }
12
13     return Fibonacci(lN-1,lB,lA+lB);
14 }
15
16 int main()
17 {
18     LONG lS=Fibonacci(40);
19
20     return 0;
21 }

递推

 1 #include <Windows.h>
 2 #include <iostream>
 3
 4 using namespace  std;
 5
 6 LONG Fibonacci(LONG lN)
 7 {
 8     LONG lS=1;
 9     LONG lA=1;
10     LONG lB=1;
11
12     for (LONG lCount=3;lCount<=lN;lCount++)
13     {
14         lS=lA+lB;
15         lA=lB;
16         lB=lS;
17     }
18
19     return lS;
20 }
21
22 int main()
23 {
24     LONG lS=Fibonacci(40);
25
26     return 0;
27 }
时间: 2024-11-02 15:27:22

斐波那契数列 递归 尾递归 递推 C++实现的相关文章

剑指offer-矩形覆盖-斐波那契数列(递归,递推)

class Solution { public: int rectCover(int number) { if(number==0 || number==1||number==2) return number; return rectCover(number-1)+rectCover(number-2); } }; *******************************************************************************************

斐波那契数列递归内存溢出如何解决

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........某一项是前两项的和.使用递归调用时前四十项求解没有问题,但到底五十项的时候会出现内存溢出,求不出结果.所以要想求出更多的项必须使用非递归的方法求解,数据类型不能再是int,可以为double. 1.内存溢出的实例 package test.only

DP思想在斐波那契数列递归求解中的应用

斐波那契数列:1, 1, 2, 3, 5, 8, 13,...,即 f(n) = f(n-1) + f(n-2). 求第n个数的值. 方法一:迭代 public static int iterativeFibonacci(int n) { //简单迭代 int a = 1, b = 1; for(int i = 2; i < n; i ++) { int tmp = a + b; a = b; b = tmp; } return b; } 方法二:简单递归 public static long

51nod 1350 斐波那契表示 (找规律递推)

分析: - -! 找规律...首先可以归纳证明,对于n,最佳的取法是先取不大于n的最大的那个斐波那契数,然后递推.从而可以得到算出F(n)的一个方法,但是n的范围太大了,先算出n较小的情况,会发现: 第三列为F(n),第二列为G(n),可以看出第k块是由k-1块和k-2块+1合在一起得到的,从而可以先预处理前k块之和(k不会超过100),然后对于每个n,先找到最大的不超过n的那块,然后对剩下的项递归,总的复杂度为O(T*logn). 1 #include<iostream> 2 #includ

java中的不死兔问题(斐波那契数列)(递归思想)

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? public class Item { public static void main(String[] args) { // 不死兔问题 System.out.println(rabbit(3)); } public static int rabbit(int m) { if(m <= 0) { System.out.println("输入错误!没有此月份

斐波那契数列递归的时间复杂度

f(n)=f(n-1)+f(n-2) 二阶常系数差分方程,解得: 当n趋于无穷大,后面的加数趋于0,则约等于O(1.618^n),即如O(2^n)级别 其实可以树状展开看下,顶层是f(n),之后每层翻倍,则所有子节点的和约为2^n级别,但不会满二叉,所以比这小点. 原文地址:https://www.cnblogs.com/willaty/p/11396840.html

$O(m^3log(n))$求斐波那契数列

\(O(m^3log(n))\)求斐波那契数列 利用这个递推式:\({F_{n+2}\choose F_{n+1}}={{1 1}\choose{1 0}}{F_{n+1}\choose{F_{n}}}\) 记\({{1 1}\choose{1 0}}\)为\(A\) 得到\({F_{n+1}\choose{F_{n}}}=A^n{F_1\choose F_0}=A^n{1\choose 0}\) // Created by CAD on 2020/2/18. #include <bits/st

递归:阶乘、斐波那契数列

阶乘 public static void main(String[] args) { System.out.println(factorial(5));; } //factorial 阶乘 public static long factorial(int n) { if (n == 1) { return 1; } return n*factorial(n-1); } 阶乘画图理解 斐波那契数列递归实现: public static void main(String[] args) { Sys

面试官问你斐波那契数列的时候不要高兴得太早

前言 假如面试官让你编写求斐波那契数列的代码时,是不是心中暗喜?不就是递归么,早就会了.如果真这么想,那就危险了. 递归求斐波那契数列 递归,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法.斐波那契数列的计算表达式很简单: 1F(n) = n; n = 0,12F(n) = F(n-1) + F(n-2),n >= 2; 因此,我们能很快根据表达式写出递归版的代码: 1/*fibo.c*/ 2#include <stdio.h> 3#include <stdlib.h&