帮我用C语言写一个程序:编写一个自定义的递归函数fun(n),该函数的功能是求整数n的阶乘,在主函数main中调用此自定义函数,求解1!+2!+3!+......n!,运行时n由用户从键盘输入,如果输入的不是整数,则屏幕输出“输入非法!请重新输入!”
时间: 2023-09-30 16:01:48 浏览: 47
好的,下面是使用C语言编写的程序,可以实现您的需求:
```
#include <stdio.h>
int fun(int n)
{
if (n == 0 || n == 1)
return 1;
else
return n * fun(n - 1);
}
int main()
{
int n, sum = 0;
printf("请输入一个正整数n:");
if (scanf("%d", &n) != 1 || n < 0) {
printf("输入非法!请重新输入!\n");
return 0;
}
for (int i = 1; i <= n; i++) {
sum += fun(i);
}
printf("1!+2!+3!+...+n! = %d\n", sum);
return 0;
}
```
以上程序中,我们定义了一个自定义的递归函数`fun(n)`,实现求整数n的阶乘。在主函数`main`中,我们首先通过`scanf`函数从键盘读入用户输入的正整数n。如果输入的不是整数或者小于0,程序会输出“输入非法!请重新输入!”并退出。如果输入的是一个正整数,我们就可以通过循环调用自定义函数`fun(i)`,并将每次调用的结果相加,最终求出1!+2!+3!+...+n!的值,并输出结果。
希望能够帮到您!
相关问题
用c语言 写一个递归函数int fun(int n),将正整数n反转。
以下是用 C 语言编写的递归函数,用于将正整数 n 反转:
```c
#include <stdio.h>
int fun(int n) {
if (n < 10) {
return n;
} else {
int digit = n % 10;
int newNum = fun(n / 10);
while (newNum >= 10) {
newNum /= 10;
}
return digit * power(10, numDigits(newNum)) + newNum;
}
}
int power(int base, int exponent) {
int result = 1;
for (int i = 0; i < exponent; i++) {
result *= base;
}
return result;
}
int numDigits(int n) {
int count = 0;
while (n > 0) {
count++;
n /= 10;
}
return count;
}
int main() {
int n = 12345;
printf("Original number: %d\n", n);
int reversed = fun(n);
printf("Reversed number: %d\n", reversed);
return 0;
}
```
可以看到,该函数使用了三个辅助函数:power 函数用于计算 10 的幂,numDigits 函数用于计算一个数字的位数,以及一个 while 循环,用于将新数字缩小到一位。
用C语言编写程序:一个自定义的递归函数fun(n),该函数的功能是求整数n的阶乘,在主函数main中调用此自定义函数,求解1!+2!+3!+......n!,运行时n由用户从键盘输入,如果输入的不是整数,则屏幕输出“输入非法!请重新输入!”
下面是用C语言编写的程序:
```c
#include <stdio.h>
int fun(int n) {
if (n == 0) {
return 1;
} else {
return n * fun(n - 1);
}
}
int main() {
int n, i, sum = 0;
printf("请输入一个整数n:");
if (scanf("%d", &n) != 1) {
printf("输入非法!请重新输入!\n");
return 0;
}
for (i = 1; i <= n; i++) {
sum += fun(i);
}
printf("1!+2!+3!+...+%d! = %d\n", n, sum);
return 0;
}
```
首先定义了一个自定义的递归函数 `fun(n)`,用来计算整数n的阶乘。在主函数 `main` 中,先从键盘输入整数n,如果输入的不是整数,则屏幕输出“输入非法!请重新输入!”并结束程序。接着使用循环计算1!+2!+3!+...+n!的结果,并将结果输出到屏幕上。