【发布时间】:2012-12-06 13:54:34
【问题描述】:
我正在编写一个程序来使用main() 函数的递归计算阶乘。
/* Print factorial */
#include <stdio.h>
#include <stdlib.h>
static char **p;
int main(int argc, char **argv)
{
int n, rv;
if (argc < 2) {
printf("Usage: a.out <value>\n");
exit(-1);
}
n = atoi(argv[1]);
if (!n) {
rv = 0;
} else {
if (n == 1) {
rv = 1;
} else {
n = n - 1;
**p = n;
main(2, p);
}
}
printf("%d\n", rv);
return 0;
}
程序使用gcc 编译,但在执行时,我在**p = n 处遇到分段错误。有人可以帮我修改上述程序以获得正确的结果。另外,在main() 中的连续递归调用之间捕获正确的rv 值的逻辑是什么?
【问题讨论】:
-
你为什么要明确使用你知道不好的东西?
-
如何先去除seg-fault?
-
@icepack: FUBAR - 由于任意递归而完全赞成
-
p未分配,不能尊重它。正确地做:尝试编写具有良好实践的“标准”代码 -
你应该使用所有警告和调试信息进行编译,即在 Linux 上使用
gcc -Wall -g,改进你的代码直到没有给出警告,并学习使用gdb调试器(以及 @987654330 @)
标签: c linux recursion segmentation-fault