C语言—递归函数

  1. 定义:在函数调用时,直接或间接地自己调用自己的函数;

  1. 分为两种调用:直接调用(自己调用自己)、间接调用(a→b→c→a);

  1. 示例,以求n!为例:

#include<stdio.h>
int resucsion(int a);
int main(void)
{
    int n=0,result=0;
    printf("please input a number:\n");
    scanf("%d",&n);
    result=resucsion(n);
    pritnf("%d!=%d\n",n,result);
    return 0;
}

int resucsion(int a)
{
    int sum;
    if(a == 1)
    {
        sum=1;
    }
    else
    {
        sum=a*resucsion(a-1);
    }
    return sum;
}
  1. 递归函数有两个阶段:

第一个阶段:递推,将原问题分解为新问题,由已知找未知,最终达到已知的条件,即递归结束的条件;

第二个阶段:回归,从已知的条件出发,逐一返回值,最终到达递推开始处;

  1. 递归调用的特点:

①递归调用不是复制该函数,每次调用时,新的局部变量和形参会在内存中重新分配内存单元,并以新的变量重新开始执行;即每一次调用就会开辟一个新空间;每次调用层的局部变量和形成释放后,并返回上次调用自身的地方继续执行;

②递归调用一般不节省内存空间,因为每次调用都要产生一组新的局部变量,从而不破坏上层的局部变量;

③递归调用不会加快程序的执行速度,因为每次调用都要保护上层局部变量(现场),而返回时又要恢复上层局部量,占用执行时间;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值