阶乘C++

#include <iostream>
#include <math.h>
using namespace std;

int main()
{
	int n;
	cin>>n;
	int sum=1;
	for(int i=1;i<=n;i++)
	{
		sum=sum*i;
	}
	cout<<sum<<endl;
	return 0;
}
C++中,递归是一种常见的方法,用于计算一个数的阶乘阶乘的定义是:对于一个非负整数 $ n $,其阶乘 $ n! $ 是所有小于等于 $ n $ 的正整数的乘积,并且规定 $ 0! = 1 $。 递归实现的核心思想是将问题分解为更小的子问题,直到达到基本情况(即终止条件)。对于阶乘计算来说,递归函数会调用自身来计算 $ (n-1)! $,然后将其与 $ n $ 相乘。以下是使用递归实现阶乘的完整示例代码: ```cpp #include <iostream> using namespace std; int factorial(int n) { // 基本情况:当 n 等于 0 或 1 时,阶乘为 1 if (n == 0 || n == 1) { return 1; } else { // 递归调用:将问题分解为规模更小的问题 return n * factorial(n - 1); } } int main() { int n; cout << "请输入一个非负整数以计算其阶乘: "; cin >> n; if (n < 0) { cout << "错误:负数没有阶乘。" << endl; } else { int result = factorial(n); cout << n << "! = " << result << endl; } return 0; } ``` ### 递归实现的关键点 1. **基本情况**:递归函数必须有一个或多个明确的终止条件,否则会导致无限递归并最终引发栈溢出错误。在此程序中,$ n == 0 $ 或 $ n == 1 $ 时返回 1 是终止条件。 2. **递归步骤**:在每一步递归调用中,问题规模都会减小。例如,计算 $ n! $ 需要先计算 $ (n-1)! $,依此类推,直到达到基本情况。 3. **输入验证**:为了确保程序的鲁棒性,在主函数中添加了对负数输入的检查,因为阶乘仅对非负整数有效。 ### 示例输出 如果用户输入 $ 5 $,则输出如下: ``` 5! = 120 ``` ### 性能注意事项 虽然递归方法直观且易于实现,但在实际应用中需要注意以下几点: - **栈溢出风险**:递归深度过大会导致栈溢出,尤其是在处理大数值时。 - **效率问题**:递归可能导致重复计算和额外的函数调用开销。相比之下,迭代方法通常更高效[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值