输入一个正整数n,求n!n!=1*2*3*…*n递归c++
时间: 2023-11-14 22:43:59 浏览: 155
#include <stdio.h>
int factorial(int n) { // 定义递归函数
if (n == 1) { // 递归结束条件
return 1;
} else {
return n * factorial(n-1); // 递归调用
}
}
int main() {
int n;
printf("请输入一个正整数n:");
scanf("%d", &n);
printf("%d! = %d\n", n, factorial(n)); // 调用递归函数
return 0;
}
相关问题
C++输入一个正整数,使用while和printf输出语句求n!,n!=1*2*3*…*n
在C++中,你可以通过while循环和递归的方式来计算并打印一个正整数n的阶乘。首先,你需要确认用户输入的是正整数,并避免计算过大导致溢出。下面是一个简单的示例:
```cpp
#include <iostream>
unsigned long long factorial(int n) {
if (n == 0 || n == 1) { // 阶乘的基本情况,0! 和 1! 等于1
return 1;
} else {
return n * factorial(n - 1); // 递归调用,n! = n * (n-1)!
}
}
int main() {
int num;
std::cout << "请输入一个正整数: ";
std::cin >> num;
while (num > 0) { // 使用while循环,防止大数溢出
printf("%llu ", factorial(num));
num--;
}
printf("\n");
return 0;
}
```
在这个程序中,`factorial()`函数用于计算阶乘,而主函数`main()`负责获取用户输入,并利用while循环逐步打印结果。
描述 某人写了N封信,用去N个信封,结果所有的信都装错了信封。求所有的信都装错信封共有多少种不同情况。可用下面公式(错位排列的递推公式): 基本形式:D(1)=0; D(2)=1 递归形式:D(n)=(n-1)*( D(n-1)+D(n-2)) 输入描述 一个正整数N,N<13。 输出描述 所有的信都装错信封的不同情况数。 C++递归完成
好的,以下是使用C++语言实现的递归方式来求解D(n)的代码:
```cpp
#include <iostream>
using namespace std;
int D(int n) {
if (n == 1) {
return 0;
} else if (n == 2) {
return 1;
} else {
return (n-1) * (D(n-1) + D(n-2));
}
}
int main() {
int n;
cin >> n;
cout << D(n) << endl;
return 0;
}
```
首先定义一个递归函数D(n)来求解D(n),当n等于1时返回0,当n等于2时返回1,否则使用递推公式D(n) = (n-1) * (D(n-1) + D(n-2))来递归求解D(n)。
在main函数中读入n,调用D(n)函数求解D(n)并输出结果即可。
需要注意的是,由于递推公式的复杂度为O(n),因此n不能太大,题目中规定n<13,所以可以使用递归方式求解。
阅读全文