我正在编写一个程序来使用递归计算阶乘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
。有人可以帮我修改上面的程序以获得正确的结果吗?另外,捕获正确的逻辑是什么rv
连续递归调用之间的值main
()?
由于您似乎并不关心标准和内容,因此这里是用于打印阶乘的递归主函数的实现,该函数在 gcc 上编译(我只在 Windows 上进行测试)。由于它不遵循标准,因此不能保证它可以在其他编译器/平台上编译。
为了好玩而编写这样的代码是可以的,但永远不要让不良行为进入严肃的编码项目或工作场所。
/* Print factorial */
#include <stdio.h>
#include <stdlib.h>
char buf[16];
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 = 1;
} else {
if (n == 1) {
rv = 1;
} else {
char *pt = buf;
char **pt2 = &pt - 1;
sprintf(buf, "%d", n - 1);
rv = main(2, pt2) * n;
}
}
printf("%d\n", rv);
return rv;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)