最后一号重复的Collat​​z序列

时间:2016-05-28 23:27:12

标签: c if-statement while-loop collatz

    // 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 个答案:

答案 0 :(得分:0)

编译C或C ++程序时应始终启用警告。如果你做了,编译器会警告你,你的函数collatz可以在不返回值的情况下终止。 (如果参数为1,会发生什么?)

这是未定义的行为,在main函数中使用可能不存在的返回值也是如此。

因此,在主要版本中打印1恰好是一个偶然的机会。但无论它打印出来都是错误的,因为您似乎希望输出仅限于collatz中打印的内容。

您可以尝试使用铅笔和纸张来播放计算机并执行功能。它不会花很长时间。当然,您也可以使用调试器。