递归和非递归分别实现求n的阶乘(不考虑溢出的问题)

文章介绍了阶乘的概念,由数学家基斯顿·卡曼在1808年提出,定义了一个正整数的阶乘是所有小于及等于该数的正整数的积。接着,提供了两种C语言实现阶乘的方法,分别是递归和非递归(循环)方式,并给出了完整的C代码示例。

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

一、阶乘的定义

先讲一下阶层的定义:

阶乘是基斯顿·卡曼(Christian Kramp,1760~1826)于 1808 年发明的运算符号,是数学术语

一个正整数的阶乘factorial)是所有小于及等于该数的正整数,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。

亦即n!=1×2×3×...×(n-1)×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。

二、递归写法

先看递归的函数写法:

/递归:
int Factorial(int n)
{
	if (n!= 0)
		return n* Factorial(n-1);
	return 1;
}

思路是这样的的:把 n! 看成是 n * (n-1)!,由此实现递归,同时要给递归加上限制条件:n 不等于零

三、非递归写法

先看非递归写法的代码:

//非递归:
int Factorial(int n)
{
	int count = 1;
	int i = 1;
	for (i = 1; i <= n; i++)
	{
		count *= i;
	}
	return count;
}

非递归的话,我选择了循环的方式。思路就是创建一个新变量 i ,并且 i 从1开始 ,循环到i <=n时停止,每次循环都把 i 的值乘到另一个变量 count ,这种写法是直接通过阶层的定义进行解题的

四、程序的全部代码

程序的所有代码如下图:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<math.h>
 
 
//非递归:
int Factorial(int n)
{
	int count = 1;
	int i = 1;
	for (i = 1; i <= n; i++)
	{
		count *= i;
	}
	return count;
}
 
 
 
 
//递归:
//int Factorial(int n)
//{
//	if (n!= 0)
//		return n* Factorial(n-1);
//	return 1;
//}
 
 
 
 
int main()
{
	int n=0;
	scanf("%d", &n);
	int ret = Factorial(n);
	printf("%d", ret);
	return 0;
}

以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱敲代码的罗根

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

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

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

打赏作者

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

抵扣说明:

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

余额充值