函数递归(套娃)

C允许一个函数调用其本身,这种调用过程被称作递归(recursion)

这里我们先来看看简单的栗子:主函数main()的自我调用

#include <stdio.h>
int main()
{
	printf("你好");
	main();
	return 0;
}

大家可以想一下这个程序运行后的结果是--------无限循环打印你好      如下:

 分析:

每次 printf("你好"); 后,都会再次调用 main() , main() 里面有 printf("你好"); 和 main(),然后继续调用main()-------再打印,再调用,再打印,再调用,再…………

因为没有一个限制条件让它停止,所以调用一直进行(相当于循环没有限制条件而变成了死循环

而这样的递归是没有意义的,是错误的递归。

总结:

1.存在限制条件,当满足这个限制条件的时候,递归便不再继续。

2.每次递归调用之后越来越接近这个限制条件。

 来看个正确的递归:

用函数的递归求n的阶乘

我们先确定是输入n值,然后确定函数名为JC(阶乘)(流下了没技术的眼泪)😂,调用函数JC并打印。

#include <stdio.h>
int main()
{
	int n = 0;
	int ret = 0;
	scanf("%d",&n);
	ret=JC(n);
	printf("%d",ret);
	return 0;
}

这里的ret直接为n的阶乘的值

接下来我们定义函数JC

  并使它能实现函数的递归,记得存在限制条件,且不断向限制条件靠拢,以便于递归的停止

n的阶乘=JC(n):

     n*(n-1)*(n-2)*...*1

=n *  (n-1)的阶乘 = n*JC(n-1)    //因此n必须大于1,不能=1,否则n*JC(n-1) 不成立

则限制条件为n>1

n=1时,1的阶乘为1直接return 1;

int JC(int i)
{
	if (i > 1)
		return i*JC(i - 1);
	else
		return 1;
}

完整程序如下:

#include <stdio.h>
int JC(int i)
{
	if (i > 1)
		return i*JC(i - 1);
	else
		return 1;
}
int main()
{
	int n = 0;
	int ret = 0;
	scanf("%d",&n);
	ret=JC(n);
	printf("%d",ret);
	return 0;
}

这里输入3,n=3,3的阶乘为6.

 解析与调用main()相同:

 


本节较短,主要时理解函数是怎么样递归的,有不对的地方欢迎各位指正。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今年依旧去年春

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值