1

開始番号を指定すると、対応する collat​​z チェーンの長さを見つけようとするコードを作成しようとしています。

私はこれを再帰的に行うことを望んでいましたが、これは私がこれまでに持っているものです:

#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);
}

問題はもちろん、関数が最終的にエンドポイントに到達することですが、チェーンの長さとして返され、これが新しい数値になります..

カウントがエンドポイントに達したときにこの値を最初の呼び出しの出力として取得できるように、このプログラムをどのように構成できますか?

4

1 に答える 1

2

再帰呼び出しの結果を返す必要があります。現在、再帰呼び出しの値を無視して 0 を返しています。各再帰呼び出しは次のようになります。

return collatz(number, count+1);
于 2014-09-09T01:15:32.030 に答える