首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >递归调用

递归调用

作者头像
用户7272142
发布2023-10-11 21:00:26
发布2023-10-11 21:00:26
3930
举报
文章被收录于专栏:Republic博客Republic博客

一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层,当最内层的函数执行完毕后,再一层一层地由里到外退出。 递归必须是有推出条件的,如果没有,将会一直递下去,没有归。造成内存溢出崩溃。 先写一个简单的递归函数

代码语言:javascript
复制
#include<stdio.h>
#pragma warning (disable:4996)
long fact(int n)
{
    if (n == 1|| n==0)
    {
        return 1;
    }
    else
    {
        return n * fact(n - 1);
    }
}
int main()
{
    int input;
    printf("请输入一个正整数\n");
    scanf("%d", &input);
    int res = fact(input);
    printf("%d! = %d", input, res);
}

fact() 就是一个典型的递归函数。调用 fact() 后即进入函数体,只有当 n\=\=0 或 n\=\=1 时函数才会执行结束,否则就一直调用它自身。 我们写的函数是求阶乘,比如要求5的阶乘,5*4*3*2*1 要写递归有俩点1.列出两数关系公式 f = n*(n-1) 2.找出退出条件 n == 1或者 n\=\=0退出 由于每次调用的实参为 n-1,即把 n-1 的值赋给形参 n,所以每次递归实参的值都减 1,直到最后 n-1 的值为 1 时再作递归调用,形参 n 的值也为1,递归就终止了,会逐层退出。也就是递和归的意思

再次深入解析

上图是函数递归的整个过程,下面再用内存的视图看一下递归函数

每一个函数都有自己的n,他们并不是一个n。 至此,我们已经对递归函数 factorial() 的进入和退出流程做了深入的讲解,把看似复杂的调用细节逐一呈献给大家,即使你是初学者,相信你也能解开谜团。 以上就是我对简单递归函数的总结

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 再次深入解析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档