java - gcd 的这种实现是否正确

标签 java greatest-common-divisor

public static int divisor(int m, int n) {
    if (m == 0 || n == 0) {
        return m+n;
    } else {
        return divisor(n, m%n);
    }
}

它为我提供了 amazon.interviewstreet.com 中某些输入的错误答案(我不知道是哪个,因为他们没有透露用于测试用例的输入)

为什么这个实现总是给我带来 stackoverflow(同样不知道哪些输入)

public static int divisor(int m, int n) {
    if(m == 0 || n == 0) {
        return m+n;
    } else if (m > n) {
        return divisor(n, m%n);
    } else {
        return divisor(m, n%m);
    }
}

请让我知道我错过了什么。我是编程新手,而且还是个初学者。

最佳答案

我认为第一个是编程竞赛的代码。如果是这样,请小心您的数据类型。可能“int”不足以容纳输入。尝试用“长”来代替。 (只有当你的算法正确时这才有效。)

关于java - gcd 的这种实现是否正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17602322/

相关文章:

java - 使用 AJAX 的 tomcat 超时配置

java - hashCode() 的困境 - Java

java - Android - 手机锁定时显示来自服务的警报对话框

java - 试图找到能被 1 到 20 的所有数字整除的最小正数

algorithm - 是否可以在单个递归过程中将分数减少到最低形式,而不使用 is_zero、succ 和 pred 以外的辅助函数?

c - GCD逻辑错误

Java正则表达式,替换sql查询中的关键字

java - Java中ActionListener的实现

python - 使用 python 简化有理数

c - 如何获取用户在 './a.out'之后任意顺序输入的命令行参数整数的GCD?