java - 理解我创建的递归方法

标签 java

这是一个非常具体的问题,但希望能帮助我进一步理解递归。

我们应该创建一个递归方法来打印帕斯卡三角形。一段时间后我终于让它工作了,但我仍然不太明白我是如何到达那里的。

public static int[] pascalLine(int order){
    // ska räkna ut n:te linjen i pascals triangel
    int [] arr = new int[order];
    if (order < 0){
        throw new IllegalArgumentException("Value must be greater than 0");
    }
    else if(order == 1){
        return new int [] {1};
    }
    arr[0] = arr[order-1] = 1;
    int [] arrRev = pascalLine(order-1);
    System.out.println(toString(arrRev));
    for (int i = 1; i<arrRev.length; i++){
        arr[i] = arrRev[i-1] + arrRev[i];
    }
    return arr;
}

我正在打印整个三角形,直到第 5 行。我不明白这是怎么可能的。我的思考过程是,该方法会调用自身,直到达到 0 并给出异常。

但也许该方法的第一次调用(在 main 中)仍在进行,而另一个调用已经开始(在方法内部的调用处),并且这种情况会一直持续到 1(仍然不明白为什么它不但达到零)。

最佳答案

如果对 pascalLine 的初始调用具有负顺序,它只会抛出异常。

else if(order == 1){
    return new int [] {1};
}

递归在 order == 1 时终止,因此,如果您以正order 开始,则永远无法达到负order

pascalLine(order-1) 仅在 order > 1 时调用。

关于java - 理解我创建的递归方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28478380/

相关文章:

java - 如何让 fragment A 知道 fragment B 中的按钮已按下

Java多线程: program sporadically strats using more cores than a FixedThreadPool is allowed to

java - Freemarker - 只对 bean 使用 getter

java - 数组中的螺旋数字 - 堆栈内存溢出

java - 是否可以从 cucumber-jvm 迁移到 QAF?

java - FileNotFound 与 .jar 和 JSSE

java - Android中如何识别滑动?

java - 无法解析 JSON 响应对象

java - 如何使用 Postgres 的 $index 参数格式化 JDBCPreparedStatment

java - 最后抛出异常并捕获 block