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

数据结构----结构--线性结构--递归

数据结构----结构–线性结构–递归

1.递归的概念

递归:将一个问题拆解成解决方案完全相同的子问题,并且有一个明确的终点

看如下递归代码理解一下递归

void fun(int n){if(n==4){printf("%d",n);return;}fun(n+1);printf("%d",n);
}int main(){int a=1;fun(a);//输出的结果为 4 3 2 1
}

二.斐波那契数列

1.用递归实现斐波那契数列

int Fib(int n) {if(n==0) return;if (n==1||n==2) {return 1;}return Fib(n - 1)+ Fib(n - 2);}

优化

保存已经算过的递归结果

时间复杂度O(n)

空间复杂度O(递归的深度)

2.用循环实现斐波那契数列

int Fib(int n) {if (n == 0) return;if (n == 1 || n == 2) {return 1;}int a = 1;//n-2int b = 1;//n-1int c = 0;//nfor (int i = 3; i <= n; i++) {c = a + b;a = b;b = c;}return c;
}

时间复杂度O(n)

空间复杂度O(1)

3.青蛙跳台阶问题(网址https://leetcode.cn/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/)

题目:

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

分析:

这道题就是斐波那契数列的变形

每一次都可以选择跳1级还是2级,

拿三阶台阶来说 它的总方法就是跳二阶台阶的方法加上跳一阶台阶方法 F(3)=F(2)+F(1)

拿四阶台阶来说 它的总方法就是跳三阶台阶的方法加上跳二阶台阶方法 F(4)=F(3)+F(2)

依次类推

F(n)=F(n-1)+F(n-2)

这里注意F(1)=1 ,F(2)=2

代码为

//这里的代码是c语言下的
int numWays(int n) {if (n == 1 || n == 0) {return 1 % (1000000007);}if (n == 2) {return 2 % (1000000007);}int a = 1;//n-2 台阶的方法int b = 2;//n-1 台阶的方法int c=0;//n 台阶的方法for (int i = 3; i <= n; i++) {c = (a + b)% 1000000007;a = b% 1000000007;b = c% 1000000007;}return c % 1000000007;
}
http://www.lryc.cn/news/114412.html

相关文章:

  • 在Windows批处理程序中实现延时功能
  • Java基础入门篇——Java变量类型的转换和运算符(七)
  • 20230807通过ffmpeg将DTS编码的AUDIO音频转换为AAC编码
  • 一生一芯1——windows与Ubuntu双系统安装
  • Linux下的CGI服务器
  • 后端开发3.Fastdfs的搭建
  • 目标检测与跟踪 (3)- TensorRTYOLO V8性能优化与部署测试
  • SAS-数据集SQL垂直(纵向)合并
  • SpringBoot3 整合Prometheus + Grafana
  • Python实现GA遗传算法优化LightGBM回归模型(LGBMRegressor算法)项目实战
  • 【基于IDEA + Spark 3.4.1 + sbt 1.9.3 + Spark MLlib 构建逻辑回归鸢尾花分类预测模型】
  • 资深测试老鸟整理,性能测试-常见调优详细,卷起来...
  • 【第五章 flutter学习之flutter进阶组件-上篇】
  • 鸿蒙边缘计算网关正式开售
  • Bytebase 2.5.0 - VCS 集成支持 Azure DevOps,支持达梦数据库
  • tomcat通过systemctl启动时报错Cannot find /usr/local/tomcat/bin/setclasspath.sh
  • Django架构图
  • vue- 创建wms-web项目
  • 集成学习:机器学习模型如何“博采众长”
  • 排序算法(二)
  • CVPR 2023 | 无监督深度概率方法在部分点云配准中的应用
  • HTTP隧道识别与防御:机器学习的解决方案
  • 【MMU】认识 MMU 及内存映射的流程
  • Clion开发Stm32之存储模块(W25Q64)驱动编写
  • SpringBoot动态切换数据源
  • [C++项目] Boost文档 站内搜索引擎(4): 搜索的相关接口的实现、线程安全的单例index接口、cppjieba分词库的使用、综合调试...
  • SAP ABAP元素域值描述通过函数(DD_DOMVALUE_TEXT_GET)获取
  • 原型模式与享元模式:提升系统性能的利器
  • uniapp封装手写签名
  • 掌握 JVM 调优命令