数据结构-3.9.栈在递归中的应用

一.函数被调用背后的过程:最后被调用的函数最先结束也符合栈的后进先出

1.main函数为主函数即程序入口,运行时主函数先入栈,然后存入主函数里的数据;

2.func1函数加载在栈中时他后面的代码的地址#1(调用返回地址,不是下面其他代码的地址)也会被加载进去,其他函数也同理;

3.func1里的a,b和主函数里的a,b是不一样的,因为加载的区域不一样导致地址也不一样,

因此func1里传入a,b的值影响不到主函数里a,b的值;

4.栈其实就是内存里的某一片区域(某一片存储空间);

5.上图中main函数下还有代码,是因为在加载main函数前还会有一些未知的信息需要加载,

例如:


二.栈在递归中的应用:

1.实例:

2.递归算法求阶乘:

a.图示:

#192和#187都代表调用返回地址,是函数最终的结果,也属于函数的一部分。

n为1时不再调用factorial函数,也就没有函数入栈,之后不断出栈,求出最终结果:

b.代码:
cpp 复制代码
#include<stdio.h>
​
//计算正整数n! 
int factorial(int n)
{
    if(n==0||n==1)
    {
        return 1;
    }
    n=n*factorial(n-1);
    return n;
}
​
int main()
{
    int result=factorial(10);
    printf("%d \n",result);
    return 0;
}

3.递归算法求斐波那契数列:

a.图示:
b.代码:
cpp 复制代码
#include<stdio.h>
​
int Fib(int n)
{
    if(n==0)
    {
        return 0;
    }
    if(n==1)
    {
        return 1;
    }
    n=Fib(n-1)+Fib(n-2); 
    return n;
}
​
int main()
{
    int result=Fib(6);
    printf("%d \n",result);
    return 0;
}

三.总结:


相关推荐
米粒11 小时前
力扣算法刷题 Day 27
算法·leetcode·职场和发展
Fuxiao___2 小时前
C 语言核心知识点讲义(循环 + 函数篇)
算法·c#
漫随流水2 小时前
c++编程:反转字符串(leetcode344)
数据结构·c++·算法
笨笨饿3 小时前
20_Git 仓库使用手册 - 初学者指南
c语言·开发语言·嵌入式硬件·mcu·学习
C++ 老炮儿的技术栈3 小时前
分享一个安全的CString
c语言·c++·windows·git·安全·visual studio
穿条秋裤到处跑3 小时前
每日一道leetcode(2026.03.31):字典序最小的生成字符串
算法·leetcode
爱编码的小八嘎4 小时前
C语言完美演绎6-2
c语言
CoovallyAIHub6 小时前
VisionClaw:智能眼镜 + Gemini + Agent,看一眼就能帮你搜、帮你发、帮你做
算法·架构·github
Titan20246 小时前
map和set的封装学习笔记
数据结构·c++
CoovallyAIHub6 小时前
低空安全刚需!西工大UAV-DETR反无人机小目标检测,参数减少40%,mAP50:95提升6.6个百分点
算法·架构·github