#include<stdio.h> int fun(int n) //定义函数 { if(n==0||n==1) { n=1; } else { n=n*fun(n-1); //递归调用函数 } } int main() { int i,j; printf("请输入一个数字:\n"); scanf("%d",&i); j=fun(i); printf("它的阶乘为: %d",j); }
时间: 2024-01-24 07:02:21 浏览: 61
你提供的代码有一些问题,函数 `fun` 返回值为 `int` 类型,但是在 `fun` 函数中并没有使用 `return` 语句返回最终结果,这会导致程序无法正确计算阶乘。同时,当输入 `i` 为负数时,该程序也会进入死循环。以下是修正后的代码:
```c
#include <stdio.h>
int fun(int n) {
if (n < 0) { // 处理负数情况
printf("输入错误,不能计算阶乘\n");
return -1;
}
if (n == 0 || n == 1) {
return 1; // 返回结果
}
else {
return n * fun(n-1); // 递归调用函数
}
}
int main() {
int i, j;
printf("请输入一个数字:\n");
scanf("%d", &i);
j = fun(i);
if (j != -1) { // 如果 j 不为负数,则输出结果
printf("它的阶乘为: %d\n", j);
}
return 0;
}
```
解释一下代码:
- `fun` 函数用来计算 n 的阶乘,使用递归调用的方式。
- 当输入 `i` 为负数时,会提示输入错误,函数返回 -1。
- 当 n 等于 0 或 1 时,直接返回 1。
- 否则,递归调用 `fun(n-1)`,并将结果乘以 n,最终返回结果。
- `main()` 函数中,调用 `fun(i)` 来计算 i!,并将结果保存在 `j` 变量中。
- 如果 `j` 不为负数,则输出 `j` 的值,即 i! 的结果。
阅读全文