-1
    // Define the recursive function.
    int collatz(int p1)
    {
        // While Loop Starting
        while (p1>1)
        {
      //when the number is even
        if(p1%2==0)
        {
            p1 = p1/2;
            printf("%d ", p1);
        //using recursion
            return collatz(p1);
        }
        // Case where number is odd.
        elseif
        {
            p1 = 3*p1+1;
           //print function
            printf("%d ", p1);
           //using recursion
            return collatz(p1);
        }
        }
     }  
    // Main body.
    int main()
    {
       // Declare the variable and initialized it.
      int p1= 4;
      //print function
     printf("User Entered value  : %d\n", p1);
       // Display the number 
        printf("%d\n", collatz(p1));
        //End
        return 0;
    }

出力: 出力を次のように取得しています: 2 ,1, 1 最後の数字 1 を繰り返さないでください。間違いを犯した場所を修正してください。必要なことをしてください。

4

1 に答える 1

0

C または C++ プログラムをコンパイルするときは、常に警告を有効にする必要があります。そうした場合、コンパイラは、関数collatzが値を返さずに終了する可能性があることを警告します。(引数が 1 の場合はどうなりますか?)

これは未定義の動作であり、main関数で存在しない可能性のある戻り値を使用することも同様です。

したがって、たまたま main に 1 が出力されるのは偶然です。しかし、出力が で印刷されたものに限定されることを期待しているように見えるため、印刷されたものは何でも間違っていますcollatz

鉛筆と紙を使ってコンピューターで遊んで、関数を実行してみてください。さほど時間はかかりません。もちろん、デバッガーを使用することもできます。

于 2016-05-28T23:58:02.487 に答える