繁体   English   中英

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

[英]3n+1 weird stuff happening

在模拟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;
}

您没有任何默认return 因此返回值是不确定的。

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

if (n % 2) { return divide(3 * n + 1, count + 1); }
//           %%%%%%
else       { return divide(n / 2, count + 1); }

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

答:您需要从递归调用返回返回的值。
B.为什么在除法调用中为n分配一个值?

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

int divide(int n,int count){

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM