意大利的数学家列昂那多·斐波那契在1202年研究兔子产崽问题时发现了此数列.设一对大兔子每月生一对小兔子,每对新生兔在出生一个月后又下崽,假若兔子都不死亡.问:一对兔子,一年能繁殖成多少对兔子?题中本质上有两类兔子:一类是能生殖的兔子,简称为大兔子;新生的兔子不能生殖,简称为小兔子;小兔子一个月就长成大兔子.求的是大兔子与小兔子的总和。

月份ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ

大兔对数1123581321345589144

小兔对数01123581321345589到十二月时有大兔子144对,小兔子89对,共有兔子 144+89=233对从上表看出:

① 每月小兔对数=上月大兔对数。②每月大兔对数等于上个月大兔对数与小兔对数之和.综合①②两点,我们就有:每月大兔对数等于前两个月大兔对数之和.

如果用 un 表示第 n 月的大兔对数,则有

un = un-1 +un-2,n >2每月大兔对数un 排成数列为:1,1,2,3,5,8,13,21,34,55,89,144,此数列称为斐波那契数列.

递归法:

使用公式f[n]=f[n-1]+f[n-2],依次递归计算,递归结束条件是f[1]=1,f[2]=1。

代码示例:#include

using namespace std;

long long Fib(int n)

{

if (n == 0)

{

return 0;

}

else if (n == 1)

{

return 1;

}

else if(n > 1)

{

return Fib(n - 1) + Fib(n - 2);

}

//return n > 1 ? Fib(n - 1) + Fib(n - 2) : n; //条件运算符简单,一行代码即可

}

void Test()

{

int N = 0;

scanf("%d", &N);

int ret = Fib(N);

printf("%d\n", ret);

}

int main()

{

Test();

system("pause");

return 0;

}

但是,递归法解决此问题并非高效,下面我们看看非递归法。

非递归法:

迭代实现是最高效的,时间复杂度是n*1 = 0(n),空间复杂度是0(1)。#include

using namespace std;

long long Fib(int n)

{

if (n == 0)

{

return 0;

}

else if (n == 1)

{

return 1;

}

else if (n > 1)

{

int a = 1;

int b = 1;

int c = 1;

for (int i = 2; i

{

c = a + b;

a = b;

b = c;

}

return c;

}

}

void Test()

{

int N = 0;

scanf("%d", &N);

int ret = Fib(N);

printf("%d\n", ret);

}

int main()

{

Test();

system("pause");

return 0;

}

递归函数就兔子数C语言,【C语言】求斐波那契(Fibonacci)数列通项(递归法、非递归法)...相关推荐

  1. c语言斐波那契数列前20项和,,c语言利用数组求斐波那契数列的前20项

    推荐回答 一.斐波那契数列指的是这样一个数列1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711 ...

  2. C语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈

    C语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈 分享到: QQ空间 新浪微博 腾讯微博 豆瓣 人人网 递归是一种强有力的技巧,但和其他技巧一样,它也可能被误用. 一般需要递归解决的问题有两个特 ...

  3. 1,2,3,5,8,13用C语言输出前20项,c语言,编程实现,求斐波那契数列,1,1,2,3,5,8,......的前20项及前20项和...

    C语言源程序如下: #include int main() { int array[100]={1,1};//斐波那契数列前两个元素均为0 int i=0;//循环变量 int n=20;//数列需要 ...

  4. C语言编程求fibonacci前20项,c语言,编程实现,求斐波那契数列,1,1,2,3,5,8,......的前20项及前20项和知道...

    C语言源程序如下: #include int main() { int array[100]={1,1};//斐波那契数列前两个元素均为0 int i=0;//循环变量 int n=20;//数列需要 ...

  5. c语言输出斐波那契数列前20项,在c语言中,如何利用数组求斐波那契数列的前20项?...

    在c语言中,以vc为例利用数组求斐波那契数列的前20项的具体步骤如下: 1.首先,打开vc: 2.点击文件.新建: 3.选择win32 console application 并在右侧输入工程的名字和 ...

  6. c语言斐波纳契数列判断素数,求斐波那契数列和素数

    所谓斐波那契数列指的是数列:1,1,2,3,5,8,13,21,--.用语言描述就是后一项等于前两项和. 打印100以类的斐波那契数列 a = 1 b = 1 print(a) print(b) wh ...

  7. js_使用递归函数求斐波那契数列的前20项并输出

    输出前二十项斐波拉契数列 斐波拉契数列 斐波拉契数列 效果图 代码 <!DOCTYPE html> <html><head><meta charset=&qu ...

  8. C语言——递归函数(求斐波那契数列第n项的值)

    递归函数是指在一个函数中直接或者间接调用函数本身. 例如,设一个无返回值函数为fun,同时,设置一个整形形参变量为a ​ void fun(int a) {if(a>0){fun(a-1);pr ...

  9. python编写递归函数、求斐波那契数列第n项_40.细说递归之二:Python求解斐波那契数列...

    本篇通过青蛙跳台阶.兔子数列(斐波那契数列)问题进一步理解递归思想的魅力. 上一篇最后的题目如下: 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个n级的台阶总共有多少种跳法? 归纳 ...

最新文章

  1. 总有些物理现象颠覆你的想象
  2. Golang 并发concurrency
  3. 解析xml的问题未解决
  4. 端计算(9)-android opencv(1)
  5. 输入监听_更适合混音师的声卡 精准控制 多设备监听真的方便
  6. 直播 | ACL 2021论文解读:为结构预测问题自动寻找更强的词嵌入拼接方式
  7. ubuntu19.10安装haroopad软件
  8. 集成学习(西瓜书学习)
  9. 利用分析函数改写范围判断自关联查询
  10. matlab条形指纹拼接,matlab实现的两幅指纹图像的拼接
  11. matlab fbp fan arc,滤波反投影重建算法(FBP)实现及应用(matlab)
  12. 一个很小的图标需要另一个HTTP请求是不是很愚蠢? 如何将收藏夹图标放到精灵中?
  13. 如何搭建数据标准管理平台
  14. Android-导航栏特效-新闻类APP(仿iOS版网易新闻今日头条的文字渐变缩放特效)
  15. [Hadoop]Hive r0.9.0中文文档(二)之联表查询Join
  16. kali linux2019镜像下载,Kali 2019下载_KaLi Linux镜像文件iso下载 2019.1a x86/x64_当载软件站...
  17. 一只Quant菜鸟的修行之路
  18. System.gc()介绍
  19. 永恒之蓝 ms17_010漏洞
  20. 【转发】JS实现密码加密

热门文章

  1. 【活动】侬好上海,Microsoft Reactor来啦
  2. Docker最全教程——MongoDB容器化(十三)
  3. 使用 WeihanLi.Npoi 操作 CSV
  4. SmartSql For Asp.Net Core 最佳实践
  5. .NET Core WebApi中实现多态数据绑定
  6. 【asp.net Core MVC + angular6实战】 - 1. 环境搭建
  7. 使用 IIS 在 Windows 上托管 ASP.NET Core2.0
  8. .net core 源码解析-mvc route的注册,激活,调用流程(三)
  9. 使用Nancy打造TaskManager2.0管理系统
  10. Django05-2:路由分发/命名空间/伪静态/虚拟环境/django版本区别