開始番号を指定すると、対応する collatz チェーンの長さを見つけようとするコードを作成しようとしています。
私はこれを再帰的に行うことを望んでいましたが、これは私がこれまでに持っているものです:
#include stdio.h
int collatz(int number, int count)
{
if(number == 1)
{
return count;
}
if(number%2==0)
{
number = number/2;
collatz(number, count+1);
}
else
{
number = number*3+1;
collatz(number,count+1);
}
return 0;
}
int main(void)
{
int stored=0;
int temp;
for(int i = 1;i<10;i++)
{
temp = collatz(i,1);
if(temp>stored)
{
stored = temp;
}
}
printf("%i\n",stored);
}
問題はもちろん、関数が最終的にエンドポイントに到達することですが、チェーンの長さとして返され、これが新しい数値になります..
カウントがエンドポイントに達したときにこの値を最初の呼び出しの出力として取得できるように、このプログラムをどのように構成できますか?