问题描述
这里只是 C 语言的新手。我正在尝试使用递归和指针打印给定输入的阶乘,但是当我的输入为 5 时,输出为 2293620。有人可以帮助我吗?我不确定这个数字是从哪里来的,因为 5 的阶乘应该给我 120。谢谢你的帮助!
#include<stdio.h>
int countlength(int *num) {
int x = 1;
if (*num == 1) {
return 1;
} else {
return *num * countlength(num-1);
}
}
int main() {
int n,l;
printf("Enter number: ");
scanf("%d",&n);
l = countlength(&n);
printf("The factorial of %d is %d\n",n,l);
return 0;
}
解决方法
从您的代码中删除引用。
#include<stdio.h>
int countlength(int num) {
int x = 1;
if (num == 1) {
return 1;
} else {
return num * countlength(num-1);
}
}
int main() {
int n,l;
printf("Enter number: ");
scanf("%d",&n);
l = countlength(n);
printf("The factorial of %d is %d\n",n,l);
return 0;
}
,
在这种情况下,我认为您不需要使用按引用传递。您应该使用按值传递。那么您的代码将完美运行
,更改这一行:
return num * countlength(num - 1);
为此:
int val = *num - 1;
return *num * countlength(&val);
因此您正确分配了值并将其作为指针传递。
,
int countlength(int *num) {
int x = *num - 1;
if (*num == 1) {
return 1;
} else {
return *num * countlength(&x);
}
}
int main() {
int n,&n);
l = countlength(&n);
printf("The factorial of %d is %d\n",l);
return 0;
}```
**Try this**
,
int countlength(int *num) {
if (*num == 1) {
return 1;
} else {
return *num * countlength(&(*num - 1));
}
}
int main() {
int n,l;
printf("Enter number: ");
scanf("%d",&n);
l = countlength(&n);
printf("The factorial of %d is %d\n",l);
return 0;
}
试试这个