函数的嵌套调用和递归调用

嵌套调用
在定义函数时,一个函数内不能再定义另一个函数,即不能嵌套定义,但可以嵌套调用函数,即在调用一个函数的过程中,又调用另一个函数。
两层嵌套
执行过程:
1,执行main函数的开头部分;
2,遇函数调用语句,调用函数a,流程转去a函数;
3,执行a函数的开头部分;
4,遇函数调用语句,调用函数b,流程转去函数b;
5,执行b函数,如果再无其他嵌套的函数,则完成b函数的全部操作;
6,返回到a函数中调用b函数的位置;
7,继续执行a函数中尚未执行的部分,直到a函数结束;
8,返回main函数中调用a函数的位置;
9,继续执行main函数的剩余部分直到结束。
例:输入4个整数,找出其中的最大的数。用函数的嵌套调用来处理。

#include <stdio.h>
int main()
{
    int max4(int a,int b,int c,int d);          //对max4的函数声明
    int a,b,c,d,max;
    printf("please enter 4 interger numbers:");//提示输入4个数
    scanf("%d %d %d %d",&a,&b,&c,&d);          //输入4个数
    max=max4(a,b,c,d);                     //调用max4函数,得到4个数中的最大值
    printf("max=%d\n",max);                   //输出最大值
    return 0;
}
int max4(int a,int b,int c,int d)            //定义max4函数
{
    int max2(int a,int b);                   //对max2的函数声明
    int m;
    m=max2(a,b);             //调用max2函数,得到a和b中的大者,放在m中
    m=max2(m,c);
    m=max2(m,d);
    return(m);
}
int max2(int a,int b)                       //定义max2函数
{
    if(a>=b)
        return a;                          //若a>=b,将a作为函数返回值
    else
        return b;                         //若a<b,将b作为函数返回值
}

递归调用
在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。
例:

int f(int x)
   {
      int y,z;
      z=f(y);  //在执行f函数的过程中又要调用f函数
      return(2*z);
   } 

例:用递归方法求n!。

int main()
{
    int fac(int n);     //fac函数声明
    int n;
    int y;
    printf("input an interger number:");
    scanf("%d",&n);     //输入要求阶乘的数
    y=fac(n);
    printf("%d!=%d\n",n,y);
    return 0;
}
int fac(int n)          //定义fac函数
{
    int f;
    if(n<0)             //n不能小于0
        printf("n<0,data error!");
    else if(n==0||n==1) //n=0或,1时n!=1
        f=1;
    else  f=fac(n-1)*n; //n>1时,n!=n*(n-1)
    return(f);
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值