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

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

1.递归的概念

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

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

c 复制代码
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.用递归实现斐波那契数列

c 复制代码
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.用循环实现斐波那契数列

c 复制代码
int Fib(int n) {
	if (n == 0) return;
	if (n == 1 || n == 2) {
		return 1;
	}
	int a = 1;//n-2
	int b = 1;//n-1
	int c = 0;//n
	for (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 复制代码
//这里的代码是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;
}
相关推荐
吞下星星的少年·-·1 小时前
The 2026 ICPC Asia East Continent Online Contest (II)(构造)
数据结构·算法
Msshu1235 小时前
2~5串锂电快充优选|XSP36 Type‑C升压/升降压快充管理芯片
数据结构·随机森林·贪心算法·排序算法·线性回归·启发式算法
动词ing8 小时前
【学习笔记】数据结构栈与队列(栈先进后出+队列先进先出+括号匹配+消消乐模型)
数据结构·笔记·学习
a187927218318 小时前
【算法】链表(二):链表上的双指针——变速、异链与定距,和一份路程账本
数据结构·算法·leetcode·链表·go·指针·环形链表
zcmodeltech9 小时前
火电厂模型能演示冷态启动和故障处理吗?——基于STM32与Modbus RTU的集控实训控制系统设计
数据结构·stm32·单片机·嵌入式硬件·能源
Doubbbbbbble云9 小时前
区间合并问题的常见算法模式与优化思路4
java·数据结构·算法
David猪大卫9 小时前
【C++修炼】哈希表的实现
数据结构·c++·笔记·学习·算法·哈希算法·散列表
linx29511 小时前
单元九 · 零基础路线图-第 7–9 周·类与 RAII
c语言·开发语言·数据结构·c++·嵌入式硬件·算法
布莱克60512 小时前
C++ 七大排序算法详解:选择、冒泡、插入、计数、堆、快速与归并排序
数据结构·c++·算法·排序算法
科学实验家13 小时前
最小生成树:Prim,kruskal
数据结构·c++·算法