【发布时间】:2021-06-11 01:41:08
【问题描述】:
这里只是 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;
}
【问题讨论】:
-
countlength(num-1)编译器应该在那里给你一个警告。那是从指针中减去,而不是从指针引用的值中减去。建议您将函数更改为采用int参数而不是int *。无需作为指针传递,它会让您的生活更轻松。 -
为什么将指针作为参数传递给
countlength? -
始终启用编译器的警告! (例如
-Wall -Wextra -pedantic与 gcc/clang)它会发现问题。 -
请阅读诊断。给出它们是有原因的。