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