函数的递归求阶乘(不考虑栈溢出)

  今天学习了函数的阶乘,阶乘就是函数自己调用自己,下面我将用函数的阶乘实现求n的阶乘。不考虑栈溢出,如果考虑栈溢出应该使用迭代。

  先展示一下普通的求阶乘。

 jiecheng 函数通过两层循环来计算:

  1.外层循环遍历从 1 到 n 的每一个数(a)。
  2.内层循环计算当前数 a 的阶乘(i 初始化为 1,然后乘以从 1 到 a 的每一个数)。
  3.每次内层循环结束后,将计算得到的阶乘累加到 j 上。
最终,函数返回的是 1 到 n 所有数的阶乘之和。

#include <stdio.h>

int jiecheng(int n)
{
	int a = 0;
	int b = 0;
	int i = 0;
	int j = 0;
	for (a = 1; a <= n; a++)//第一个循环实现每个阶乘之间的相加,如1!+2!+3!……
	{
		i = 1;//使第一个循环每循环一次,a的值都初始化为1,来供第二个循环使用
		for (b = 1; b <= a; b++)//第二个循环实现得到1~n每一个数的阶乘
		{
			i *= b;

		}
		j += i;
	}
	return j;
}
int main()
{
	int n;
	scanf("%d", &n);
	int ret = jiecheng(n);
	printf("%d\n",ret );
	return 0;
}

然后是函数递归求阶乘

递归函数通常包含两个主要部分:

递归的基本情况(Base Case):

  这是递归的结束条件,即当函数参数满足某个条件时,函数将直接返回一个值,而不是继续调用自身。这是防止无限递归的关键。


递归步骤(Recursive Step):

  这是函数体中的部分,它调用函数自身,但使用不同的参数(通常是更接近基本情况的参数)。这一步是将问题分解成更小问题的过程。

#include <stdio.h>

int jiecheng(int n)
{
	int a = 1;
	int b = 0;
	if (n == 1 && n != 0)
	{
		return 1;
	}
	for (b = 1; b <= n; b++)
	{
		a *= b;
	}
	return (a + jiecheng(n - 1));
}
int main()
{
	int n;
	scanf("%d", &n);
	int ret = jiecheng(n);
	printf("%d\n", ret);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值