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

三.总结:


相关推荐
东方芷兰7 分钟前
算法笔记 04 —— 算法初步(下)
c++·笔记·算法
JNU freshman9 分钟前
图论 之 迪斯科特拉算法求解最短路径
算法·图论
xinghuitunan26 分钟前
时间转换(acwing)c/c++/java/python
java·c语言·c++·python
青松@FasterAI32 分钟前
【NLP算法面经】本科双非,头条+腾讯 NLP 详细面经(★附面题整理★)
人工智能·算法·自然语言处理
旅僧1 小时前
代码随想录-- 第一天图论 --- 岛屿的数量
算法·深度优先·图论
Emplace1 小时前
ABC381E题解
c++·算法
tekin1 小时前
Python 高级数据结构操作全解析:从理论到实践
数据结构·python·集合set·高级数据结构·集合操作·队列操作·堆操作
若兰幽竹1 小时前
【机器学习】衡量线性回归算法最好的指标:R Squared
算法·机器学习·线性回归
咸鱼过江2 小时前
观察者模式说明(C语言版本)
c语言·观察者模式
居然有人6542 小时前
23贪心算法
数据结构·算法·贪心算法