数据结构-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;
}

三.总结:


相关推荐
不正经学生2 小时前
C语言预处理详解:编译器真正动手之前的那些事
c语言·开发语言·算法·面试·bug
门思科技3 小时前
LoRaWAN 设备类别:Class A、B、C 对比与选型指南
c语言·开发语言·php
毕竟是shy哥5 小时前
计算YOLO数据集中每个类的目标数
算法·yolo·机器学习
M78佐菲5 小时前
Linux学习笔记:TCP协议
linux·笔记·学习·tcp/ip·算法
晊晌_h6 小时前
嵌入式从0到精通——数据结构总结[特殊字符]
数据结构·算法·排序算法
xiaobobo33306 小时前
c语言中for循环条件中定义临时栈变量的作用域
c语言·for循环条件定义栈变量·大括号作用域·独立栈变量
我找到地球的支点啦7 小时前
Matlab系列(009) 一CRC循环冗余校验详解
开发语言·数据结构·算法·matlab·信息与通信
罗西的思考7 小时前
【OpenClaw具身硬件】ZeroClaw 源码阅读笔记(3)--- RAG
人工智能·算法·机器学习
惜离殇7 小时前
从零开始的敲代码生活--Linux应用软件(文件操作基础1)
linux·c语言·文件操作·标准io
浪里镖客8 小时前
位姿转换矩阵写法-个人习惯(计算机理解其实是相反的)
线性代数·算法·矩阵