当前位置: 首页 > news >正文

迭代、递归、尾递归实现斐波那契数列的第n项

1.什么是斐波那契数列:

斐波那契数,亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列、费波那西数列、费波拿契数、费氏数列和兔子数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*),用文字来说,就是斐波那契数列列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加。


学习内容:

这里我们针对以1,1,为前两项的斐波那契数列,(1,1,2,3,5,8,13……)某一项即为前两项的和,这里介绍三种方法来实现它

1.迭代法:

long fac(int x)//迭代
{int i;int a = 1;int b = 1;int c = 0;for (i = 0; i < x - 2; i++){c = a + b;a = b;b = c;}return c;
}
int main()
{int a;scanf("%d", &a);printf("%d", fac(a));return 0;
}

我们先将前两个1储存在a,b中,在第一个循环中,c接收了a和b的和,再让a接收b的值,b接收c的值。如此循环往复(x-2)次,最终c的值即为f(x).

在这过程中,a,b值的更新是为了令a=f(x-2),b=f(x-1).所需循环次数由下得出:

求第三项:只需进行一次循环,即进行一次相加

求第四项:进行两次循环,即进行两次相加

求第五项:进行三次循环,即进行三次相加

……

不难看出,求第x项时,就需要进行x-2次循环了


2.线性递归法

int fac(int x)//线性递归
{if (x == 1 || x == 2)return 1;elsereturn fac(x - 2) + fac(x - 1);

此种方法很简单,就是根据数学定义按部就班:F1=1,F2=1,Fn=F(n-1)+F(n-2)(n>=3,n∈N*)

3.尾递归

int fun(int n,int a,int b)
{if(n<3)return b;else
return fun(n-1,b,a+b);
}
int main()
{
printf("%d",fun(5,1,1));
return 0;
}

我们来验证一下fun函数的功能,首先传参时必须保证形参a,b都接收1,传递(5,1,1,),过程如下:

fun(4,1,2)

fun(3,2,3)

fun(2,3,5)

当n-1=2时,函数就会返回第三形参——5


http://www.lryc.cn/news/305802.html

相关文章:

  • vulnhub靶场之driftingblues-1
  • NGINX服务器配置实现加密的WebSocket连接WSS协议
  • 5个免费文章神器,用来改写文章太方便了
  • 详细教程!VMware Workstation Pro16 安装 + 创建 win7 虚拟机!
  • Python文件和异常(二)
  • 大模型+影像:智能手机“上春山”
  • 8-pytorch-损失函数与反向传播
  • MySQL高级特性篇(8)-数据库连接池的配置与优化
  • mac下使用jadx反编译工具
  • 分布式一致性软件-zookeeper
  • 企业计算机服务器中了babyk勒索病毒怎么办?Babyk勒索病毒解密数据恢复
  • 板块一 Servlet编程:第五节 Cookie对象全解 来自【汤米尼克的JAVAEE全套教程专栏】
  • 自动驾驶---Motion Planning之Path Boundary
  • Leetcode 3048. Earliest Second to Mark Indices I
  • 从源码学习单例模式
  • axios介绍和使用
  • redis雪崩问题
  • [SUCTF 2019]EasySQL1 题目分析与详解
  • TestNG与ExtentReport单元测试导出报告文档
  • 【JavaEE】_form表单构造HTTP请求
  • Mysql中INFORMATION_SCHEMA虚拟库使用
  • 【《高性能 MySQL》摘录】第 2 章 MySQL 基准测试
  • 常用的Web应用程序的自动测试工具有哪些
  • 人工智能与开源机器学习框架
  • 高通XBL阶段读取分区
  • [极客大挑战2019]upload
  • [FastDDS] 基于eProsima FastDDS的移动机器人数据中间件
  • 实现外网手机或者电脑随时随地远程访问家里的电脑主机(linux为例)
  • spring boot集成redis
  • Docker的常用命令