java - 此递归中的 Stackoverflow 错误

标签 java ruby recursion

Java 中的这种递归有什么问题?

public class findPyt
{
    public static int sum = 0;
    public static void main(String[] args)
    {
        findP(3, 4, 5);
    }

    public static void findP(int a, int b, int c)
    {
        sum = a+b+c;

        if (sum == 1000)
        {
            System.out.println("The Triplets are: "+ a +","+ b +","+ c);
        }
        else
        {
            findP(a*2, b*2, c*2);
        }
    }
}

我得到这个异常:

Exception in thread "main" java.lang.StackOverflowError
    at hello.findP(hello.java:12)
    at hello.findP(hello.java:19)

当我尝试在 Ruby 中做同样的事情时,我得到了这个:

SystemStackError: stack level too deep


def pythagoreanTriples(a=3, b=4, c=5)

    if (a+b+c) == 1000
      puts "The Triplets are: "+ a +","+ b +","+ c
    else
    pythagoreanTriples(a*2, b*2, c*2)
    end
end

最佳答案

尝试将 sum == 1000 更改为 sum >= 1000。没有总和正好 1000 的三元组,因此它跳过了终止条件。

此外,您的 Ruby 代码与您的 Java 代码不匹配(您缺少 else)。即使它确实找到了 1000 的总和,它也会打印消息,并继续递归直到它崩溃。

关于java - 此递归中的 Stackoverflow 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3747790/

相关文章:

java - 如果程序中的任何地方都没有使用声明的类变量,为什么 eclipse 不显示警告

ruby - 带有自签名证书的 Neo4j gem https

ruby-on-rails - has_many IF 条件

ruby-on-rails - Prawn PDF压缩,压缩内容流,它是做什么的

java - 为什么我的代码超出了时间限制(leetcode 104)

c++ - 在C++中的模板类中定义方法

java - 在 ArrayAdapter 中的 edittext 之外执行某些操作后,如何隐藏 android 中的软键盘?

Java 泛型,<C> 是否等于 <T>?

java - Mahout - 简单的分类问题

javascript - 递归金三 Angular ,三 Angular 形逼近哪一点?