用递归实现求n的阶乘 !

程序代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int fact(int n)
{
	if (n ==1){
		return 1;
	}
	return n*fact(n - 1);
}
int main()

{
	int n = 0;
	printf("enter a number:");
	scanf("%d", &n);
	printf("%d", fact(n));
	system("pause");
	return 0;
}

使用函数递归方法阶乘 n!,其核心思路是依据阶乘的定义:当 n 为 0 或 1 时,n 的阶乘1;当 n 大于 1 时,n 的阶乘等于 n 乘以 (n - 1) 的阶乘。以下是几种不同语言环境下的函数设计方案: ### C 语言实现 ```c #include <stdio.h> int fac(int n) { int f; if (n < 0) printf("data error!"); // 负数没有阶乘 else if (n == 0 || n == 1) f = 1; // 0 和 1阶乘都是 1 else f = n * fac(n - 1); // 当 n > 1 时,n! = n * (n - 1)! return f; } int main() { int n, y; printf("请输入一个整数:"); scanf("%d", &n); y = fac(n); printf("%d! = %d", n, y); return 0; } ``` 此方案在`fac`函数里,先对输入的`n`进行检查,若`n`为负数则输出错误信息;若`n`为 0 或 1 则返回 1;若`n`大于 1 则通过递归调用`fac(n - 1)`来计算阶乘 [^3]。 ### C++ 实现 ```cpp #include <iostream> using namespace std; int Fac(int n) { if (n == 0 || n == 1) { return 1; } else { return n * Fac(n - 1); } } int main() { int M, N, sum = 0; cin >> M >> N; sum = Fac(M) + Fac(N); cout << M << "!+" << N << "!=" << sum << endl; return 0; } ``` 该方案中的`Fac`函数,当`n`为 0 或 1 时直接返回 1,否则通过递归调用`Fac(n - 1)`来计算 n 的阶乘,在`main`函数中调用`Fac`函数计算两个数阶乘的和 [^2]。 ### 另一种 C 语言实现 ```c #include <stdio.h> int fun(int n) { int sum; sum = n; if (n >= 2) sum = sum * fun(n - 1); else sum = 1; return sum; } int main() { int num; printf("INPUT NUMBER:\n"); while (scanf("%d", &num) == 1) { printf("Here are the results:%d\n", fun(num)); printf("INPUT NUMBER:\n"); } return 0; } ``` 在这个方案里,`fun`函数先将`n`赋值给`sum`,若`n`大于等于 2 则通过递归调用`fun(n - 1)`计算阶乘;若`n`小于 2 则将`sum`设为 1 [^1]。 ### 另一种 C++ 实现 ```cpp #include <iostream> using namespace std; int fun(int n) { if (n == 0 || n == 1) { return 1; } else { return n * fun(n - 1); } } int main(int argc, char * argv[]) { int n; cout << "输入一个整数,按 Q/q 退出:" << endl; while (scanf("%d", &n) == 1) { if (n >= 0) { cout << n << "!=" << fun(n) << endl; } else { cout << "输入数据有误,请重新输入一个正整数!" << endl; } } return 0; } ``` 该方案的`fun`函数逻辑与上述类似,在`main`函数中获取用户输入的整数,调用`fun`函数计算阶乘并输出结果,同时对输入的负数进行错误提示 [^4]。 ### 包含错误处理的 C++ 实现 ```cpp #include <iostream> using namespace std; long fac(long n) { long m; if (n < 0) { cout << "错误!" << endl; } else if (n == 0 || n == 1) { m = 1; } else { m = fac(n - 1) * n; } return m; } int main() { long n, m; cout << "请输入 n 的值:"; cin >> n; m = fac(n); cout << n << "!=" << m << endl; return 0; } ``` `fac`函数中,对输入的`n`进行检查,若`n`为负数则输出错误信息;若`n`为 0 或 1 则将`m`设为 1;若`n`大于 1 则通过递归调用`fac(n - 1)`计算阶乘 [^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值