递归调用

在调用函数 fun 的过程中,又调用 fun 函数,这是在函数内部调用函数本身,见下图:

这种调用都是无终止的调用,显然程序中不可能出现这种状况,而是应该出现有限次数的、有终止的递归调用,这可以用 if 语句来控制。

即:递归函数的两个要素为递归表达式和递归出口。

用递归的方法求n!。

n!=1*2*3*4.......*(n-1)*n。采用递归的公式可表示为:

即 5!=4!*5,而 4!=3!*4...,1!=1,具体计算过程如下:

#include<stdio.h>
int main()
{
    int fac(int n);
    int n,y;

    printf("please input an integer number:");
    scanf("%d",&n);
    if(n<0)
        printf("data error");   //n不能小于0
    else
    {
        y = fac(n);
        printf("%d!=%d\n",n,y);
    }

    return 0;
}

int fac(int n)
{
    int f;

    if(n==0||n==1)
        f = 1;
    else 
        f = fac(n-1) * n;//关注的是每次调用n的变化

    return f;
}

fac(n-1)*n如果n是5,递归的过程为

fac(4)*5

fac(4)=fac(3)*4

fac(3)=fac(2)*3

fac(2)=fac(1)*2

fac(1)=1,返回值是1返回给上级调用

fac(2)=fac(1)*2=2,返回值是2返回给上级调用

fac(3)=f(2)*3=fac(1)*2*3=6,返回值是6返回给上级调用

fac(4)=fac(3)*4=24返回值是24,返回给上级调用

fac(5)=fac(4)*5=120是最终值

递归调用就是外层调用一直调用自己知道满足打断条件

然后内层调用的返回值一层一层向外传递

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值