发生了3n + 1个奇怪的事情

bad*_*0re 1 c

在模拟Colatz猜想问题时我已经进行了递归,当我想在递归中打印计数时我得到了我需要的结果但是当函数返回结果时它给了我奇怪的数字,为什么呢?

#include <stdio.h>
#include <stdlib.h>

int divide(int n,int count){

    if(n<=1){printf("%d ",count);return count;} 

    if(n%2==1){divide(n=3*n+1, ++count);}
    else{divide(n/=2, ++count);}
}
int main(void) {  
    printf("%d ",divide(10,1)); 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

md5*_*md5 10

您没有任何默认值return.所以返回值是未定义的.


Ker*_* SB 8

您需要返回递归调用的结果:

if (n % 2) { return divide(3 * n + 1, count + 1); }
//           %%%%%%
else       { return divide(n / 2, count + 1); }
Run Code Online (Sandbox Code Playgroud)

请注意,分配局部变量没有意义,因此我将其更改为简单计算.

  • 我建议在编译器标志中添加"-Wall"或类似的"警告一切".应该选择"并非所有路径都有返回值". (2认同)