在模拟Colatz Conjecture问题的同时,我想在递归时打印计数,我得到了我需要的结果,但是当函数返回结果时,它给了我奇怪的数字,为什么呢?
#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;
}
答案 0 :(得分:10)
您没有任何默认return
。所以返回值是未定义的。
答案 1 :(得分:8)
您需要返回递归调用的结果:
if (n % 2) { return divide(3 * n + 1, count + 1); }
// %%%%%%
else { return divide(n / 2, count + 1); }
请注意,分配局部变量没有意义,因此我将其更改为简单计算。
答案 2 :(得分:3)
一个。您需要从递归调用返回返回的值
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;
}