函数的递归调用

文章介绍了递归调用的概念,即函数在执行过程中调用自身。通过两个程序示例解释了递归如何工作,一个是解决学生年龄问题,另一个是计算阶乘。递归的关键在于使用if语句控制终止条件,以避免无限循环。同时提到,由于int类型限制,递归计算阶乘超过一定数值(如12!)会失去准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

如:
int f(int x)
{
int y,z;
z=f(y);
return (2*z);
}
这里是再调用函数f时,其内部有一次调用了f函数,这五个就是直接调用本函数。

在这里插入图片描述
这张图里的第一个就是直接调用,第二个是间接调用。

这两种递归调用都是无终止的自身调用。

为了出现有限次的调用,我们使用if语句来控制。
只有在某一条件成立时,才能进行调用。
有点循环语句的特点。

我们来看一个程序:
有5个学生坐在一起,问第五个学生的年龄。
他说比第四个学生大两岁,
第四个学生比第三个学生大两岁,
第三个学生比第二个学生大两岁,
第二个学生比第一个学生大两岁,
第一个学生10岁。

这个就是一个递归。

#include <stdio.h>
int main()
{
	int age(int n);
	printf("第五个学生的岁数是:%d\n", age(5));
	return 0;
}
int age(int n)
{
	int c;
	if (n == 1)
	c = 10;
	else
		c = age(n - 1) + 2;
	return(c);
}

在这里插入图片描述
age函数进行了递归。

我们再来看一个程序:
用递归来求n!

#include <stdio.h>
int main()
{
	int a(int n);
	int n;
	int y;
	scanf("%d", &n);
	y = a(n);
	printf("%d!=%d\n", n, y);
	return 0;
}
int a(int n)
{
	int f;
	if (n < 0)
		printf("n<0,data error!");
	else if (n == 0 || n == 1)
		f = 1;
	else f = a(n - 1) * n;
	return (f);
}

在这里插入图片描述

在这个程序里面,主要是函数部分的定义
考虑了所有的情况,首先是n的正负,附属不要
其次是n为0和1时的取值。
if语句很重要。

当然,这个值最多求导12!,因为int类型的存储单元有限,更大的结果就不准确,上面的20!结果就不准确。

本篇内容到此结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值