私のプログラムは次のとおりです。
#include <stdio.h>
int collatz(int seed, int count) {
int next = 0;
if (seed % 2 == 0) {
next = seed / 2;
} else {
next = 3 * seed + 1;
}
count++;
if (next == 1) {
return count;
} else {
return collatz(next, count);
}
}
int main() {
int max = 0;
int index = 0;
int i;
for (i=1; i<1000000; i++) {
int current = collatz(i, 1);
if (current > max) {
max = current;
index = i;
}
}
printf("%i\n", index);
return 0;
}
通常、再帰は特定の深さまでしか進まないことを理解しています。ただし、私が知る限り、セグフォルトを停止する末尾再帰を実装しました。i を 100,000 に設定すると、プログラムが実行され、基礎となるアルゴリズムが正しいと信じるようになります。ただし、100万で次のようになります。
セグメンテーション違反: 11
私は何を間違っていますか?