C语言--函数的嵌套与递归调用(函数内容二)

*实现函数的嵌套与递归调用*,求几个数中的最大值以及相加和
函数的嵌套与递归其实很容易区分,嵌套很容易理解,递归难度更大一些,接下来组合看这两个概念:

函数的嵌套:在调用一个函数的过程中,又调用另一个函数。这就是函数的嵌套。注意,是调用另一个函数。

图解如下:

在这里插入图片描述

在嵌套调用过程中,若被调函数有返回值,则返回运算的值,若无则执行完后返回主调函数或进行进行下一个被调函数的运行。最终均在main函数中结束

函数的递归:在调用一个函数的过程中,直接或间接地调用该函数本身。注意是调用自身。

直接地调用,图解如下:

在这里插入图片描述

在调用f函数的过程中,又要调用f函数本身。
间接地调用,图解如下:
在这里插入图片描述
在进行调用f函数的过程中,需要调用f1函数;而在调用f1函数过程中,又要调用f函数,互相被其调用。
在了解了嵌套递归的区别之后,接下来看代码:
嵌套:实现4个数中的最大值输出

#include<stdio.h>              //实现最大值的交换,进行函数的嵌套调用
#include<stdlib.h>
int main()
{
int max1(int a,int b,int c,int d);
int a,b,c,d,max;
printf("Please enter 2 interger numbers:");
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
max=max1(a,b,c,d);
printf("max=%d \n",max);
system("pause");
return 0;
}
int max1(int x,int y,int z,int k)
{
	int max2(int i,int j);
	int m;
	m=max2(x,y);
	m=max2(m,z);
	m=max2(m,k);
	return m;
}
int max2(int i,int j)
{
if(i>=j)
return i;
else
return j;
}

输出结果为:
在这里插入图片描述

记住,C语言中所有代码执行过程,都是在main函数中开始,也是在main函数中结束。我们来看该函数的执行过程,进入main函数往下,输入数据之后,进行max1的函数调用,进行实参与形参传值,进入max1函数主体,此时max1又调用了max2函数,又进入max2函数。进行值的比较,从函数功能上看,返回的值是较大的那个值。返回值之后,又进入max1函数,继续往下进行,当所有嵌套调用执行完之后,返回最大值给main函数并赋值给max变量输出。函数结束!
可见,函数之间的嵌套还是很简单的,过程很容易分析。
接下来我们着重了解递归。
递归 :实现递归相加之和

#include<stdio.h>
#include<stdlib.h>        //实现age函数的递归调用
int main()
{
int age(int n);
printf("请输出第五个学生的年龄:%d\n",age(5));
system("pause");
return 0;
}
int age(int n)
{
int c;
if(n==1)
	c=10;
else
	c=age(n-1)+2;     //图解中返回值应该标个向上的箭头,更好理解,作图的时候遗漏了。
return c;
}

输出结果为:
在这里插入图片描述
该函数的实现过程我制作了一张图,供大家理解:
在这里插入图片描述
当接受完所有的调用后,age(5)的值传回main函数后进行输出。
可见嵌套的代码多易懂,递归的代码少但是中间分析过程是很多的。
对于上一个max求最大值,其实可以简化代码,可以理解为变成了一个递归函数。
代码为:

#include<stdio.h>              //实现最大值的交换,进行函数的嵌套调用
#include<stdlib.h>
int main()
{
int max1(int a,int b,int c,int d);
int a,b,c,d,max;
printf("Please enter 2 interger numbers:");
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
max=max1(a,b,c,d);
printf("max=%d \n",max);
system("pause");
return 0;
}
int max1(int x,int y,int z,int k)
{
	int max2(int i,int j);
	int m;
	m=max2(max2(max2(x,y),z),k);
	return m;
}
int max2(int i,int j)
{
if(i>=j)
return i;
else
return j;
}

结果相同。这里不进行赘述,多对上面函数和附图进行理解
如果觉得内容稍可,希望留下你的在这里插入图片描述
对于函数定义介绍在上一期,所有讲解内容均为辅助理解,详细还请多看书。

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值