Collatz序列重复最后一个数字1

Collatz序列重复最后一个数字1,c,if-statement,while-loop,collatz,C,If Statement,While Loop,Collatz,输出:我得到的输出为: 2 ,1, 1 我不应该重复最后一个数字1。请纠正我犯错误的地方。请做必要的。< /P> < P>在编译C或C++程序时,应该始终启用警告。如果您这样做了,编译器会警告您函数collatz可能会在不返回值的情况下终止。(如果参数为1,会发生什么情况?) 这是未定义的行为,在main函数中使用可能不存在的返回值也是如此 所以,这只是一个偶然的机会,它恰好打印1的主要。但无论打印什么都是错误的,因为您似乎希望输出仅限于在collatz中打印的内容 你可以试着玩电脑,用铅笔和纸

输出:我得到的输出为: 2 ,1, 1
我不应该重复最后一个数字1。请纠正我犯错误的地方。请做必要的。< /P> < P>在编译C或C++程序时,应该始终启用警告。如果您这样做了,编译器会警告您函数
collatz
可能会在不返回值的情况下终止。(如果参数为1,会发生什么情况?)

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

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


你可以试着玩电脑,用铅笔和纸来执行你的功能。不会花很长时间的。当然,也可以使用调试器。

1)C和C++是不同的语言。挑一个!2)这既不是C也不是C++。3) 请看。我已经用CSo写了为什么要为不同的语言添加标记?关于其他两个问题,请编辑您的问题。我在Linux环境下工作。我是C编程新手。我不知道在vmware机器的Linux环境中调试。@chandu:是的,我也这么怀疑,这就是为什么我建议使用铅笔和纸的原因。但如果你认真学习如何编程,你最终将不得不学习如何使用调试器。
    // 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;
    }