C函数的调用-----递归调用

递归调用(对内存的消耗是极大的)

概念:
一个函数在它的函数体内,调用它自身称为递归调用,这种函数叫做递归函数
注意:
- C语言的函数中,支持运行时堆栈对递归函数的调用
- 在 递归调用的时候,主调函数又是被调函数,执行调用的过程就是其反复调用自己的过程,每一次调用就会进入新的一层,在前一篇博客中我们提到过,函数栈,那么递归调用在调用自己的过程中,同样也是会不断开辟函数栈;
3.递归调用在调用自身进入下一层的时候,因为上一层占用的栈空间其实是没有进行释放掉的,因此过多层次的递归的话,有可能会导致内存溢出的现象
递归调用的特性:

  • 递归调用必须存在一定 的限制条件,当达到条件的时候,递归调用将不再继续执行
  • 每次调用之后,其最终的结果都是会接近该限制条件

应用:
文件夹 的遍历删除
求一个数的阶乘等
下面通过一个例子演示一下最简单的递归调用:

#include<stdio.h>

/**
 *  猆波那契数,后面的数值是前面两个数的和,
 *  阶乘
 */

long fabonacci_1(int num1);
long factorial_1(int num2);

int main(int argc,char * argv[]){
    int num = 10; 
    int i = 1;
    for(; i<= num;i++){
        printf("element:%ld\n",fabonacci_1(i));
    }   
    printf("factorial:%ld\n",factorial_1(num));
    return 0;
}



long fabonacci_1(int num1){
    if(num1 <= 2)
        return 1;
    return fabonacci_1(num1-1) +fabonacci_1(num1 - 2); 
}


long factorial_1(int num2){
    if(num2 <= 0){ 
        return 1;
    }else{
        return num2 * factorial_1(num2 - 1); 
    }   
}

对应的结果为:
element:1
element:1
element:2
element:3
element:5
element:8
element:13
element:21
element:34
element:55
factorial:3628800

其实在我们掳代码的时候,很多情况下都是需要用到迭代的。这一块的认识,对于我们降低代码量有大大的提高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值