C语言 函数的嵌套与递归 调用

本文 我们来说函数的嵌套调用和递归调用

在很多大型项目中 我们肯定不可能将所有逻辑都写在一个函数中 肯定要按功能拆解成多个特定的功能函数
函数并不允许嵌套调用,但是 允许在逻辑代码中嵌套调用
所谓函数嵌套调用 就是在一个函数中调用另一个函数,而被调用的函数 又去调用其他函数

下图 是一个函数多次互相嵌套调用的结构
在这里插入图片描述
首先进入函数 main 执行函数代码 然后调用 Fun1 函数 执行 Fun1 执行逻辑代码 走到 调用 Fun2 处 走进 Fun2
执行完毕后 回到 Fun1 剩余部分 继续执行代码
Fun1 执行完毕 回到 main 执行完毕后返回

然后 我们来说函数的递归调用

我们 有一个 从前有座山 山里有座庙 庙里有个老和尚 老和尚给小和尚讲故事 讲从前有座山 山里有个庙 …

反复讲故事 就可以理解为 反复调用自己
计算机中 一个过程 反复调用自己 它就定义为一个递归过程

C语言 支持递归 递归是一种特殊的嵌套调用

我们将递归函数 分为 直接递归调用 和间接递归调用

之间递归调用是指 在方法中之间写明逻辑 执行到某个点 调用自己
例如

int accumulation() {
    int rox = 3 + 7;
    printf("%d\n", rox);
    accumulation();
}

我们在 accumulation中直接调用 accumulation 自身 这就是直接调用

然后

int accumulation() {
    int rox = 3 + 7;
    printf("%d\n", rox);
    yml();
}

int yml() {
    int rox = 3 + 7;
    printf("%d\n", rox);
    accumulation();
}

accumulation中 调用了 yml
而 yml 中 又会调用 accumulation
多个函数 互相调用形成闭环 就是 间接递归调用

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
函数嵌套指在一个函数调用另一个函数,而归则是指函数调用自身的过程。 在C语言中,函数嵌套可以让程序更加模块化,便于维护和阅读,也可以提高程序的可重用性。例如,一个函数中需要调用另一个函数来完成某个功能,可以将这个函数嵌套在主函数中。 函数嵌套的语法很简单,例如: ```c void func1() { printf("This is function 1\n"); } void func2() { printf("This is function 2\n"); func1(); } int main() { func2(); return 0; } ``` 在上面的例子中,func2()函数调用了func1()函数归则是指一个函数调用自身的过程。函数必须包含一个停止条件,否则将会出现无限归导致程序崩溃。函数可以用于解决一些问题,例如计算阶乘、斐波那契数列等。 下面是一个计算阶乘的函数的示例: ```c int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int main() { int result = factorial(5); printf("%d", result); return 0; } ``` 在上面的例子中,factorial()函数调用自身来计算阶乘。当n等于0时,归停止,函数返回1。否则,函数计算n的阶乘并返回结果。 需要注意的是,函数的效率有时候并不高,因为每次调用函数都需要将函数的参数和返回地址等信息压入栈中,消耗了一定的时间和内存。因此,在使用函数时,应该尽量避免出现无限归的情况,以及归次数过多导致栈溢出等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值