我创建了此collat​​z代码,当我运行命令'java collat​​z 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);


现在它只会调用一次。

10-07 18:20