我创建了此collatz代码,当我运行命令'java collatz 7'时,我的程序在n达到1时不会终止,而是一直重复该序列直到StackOverflowError。谁能指出这里的问题是什么?谢谢
public class collatz{
public static void collatz(int n){
System.out.println(n+" ");
if(n==1)
return;
if(n%2==0)
collatz(n/2);
collatz(n*3+1);
}
public static void main(String[] args){
collatz(Integer.parseInt(args[0]));
}
}
最佳答案
这看起来像问题:
if(n%2==0)
collatz(n/2);
collatz(n*3+1);
如果
n%2==0
它将同时调用两者。我认为应该是这样的: if(n%2==0)
collatz(n/2);
else
collatz(n*3+1);
现在它只会调用一次。