试图更好地理解此递归问题中的double参数。任何帮助表示赞赏。关于如何将其应用到其他程序(例如pascalValue(i,j)),只略有遗漏

   public static int pascalValue(int i, int j) {
    if (j == 0) {
        return 1;
    } else if (j == i) {
        return 1;
    } else {
        return pascalValue(i - 1, j - 1) + pascalValue(i - 1, j);
    }
}

public static void computeRow(int n) {
    int counter;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j <= i; j++) {
            System.out.print(pascalValue(i, j) + " ");
        }
        System.out.println();
    }
}

最佳答案

请参阅,双参数递归的工作原理与任何其他参数化递归相同。更多参数只是更多/更多信息,您可以用来评估结果。
您要实现的目标取决于您。

因此,让我们了解一下breif中的this pascalValue(i, j)函数。

让我们看一下函数中的最后一个return语句

return pascalValue(i - 1, j - 1) + pascalValue(i - 1, j);


因此,pascalValues(i, j)函数被两次调用为:


pascalValue(i - 1, j - 1)
pascalValue(i - 1, j)


现在这是基本条件:


if (j == 0) { return 1;}
else if (j == i) { return 1;}


基本条件只不过是告诉函数在哪里停止,否则,递归调用将继续发生,最终堆栈将溢出。

因此,当达到基本条件时,将指定值返回到其先前的调用,并根据表达式(在我们的情况下为pascalValue(i - 1, j - 1)pascalValue(i - 1, j)的相加)计算结果

请记住,每个调用都将满足其基本条件,因此,如果pascalValue(i - 1, j - 1)达到其基本条件,则将返回指定值,该值是先前调用的结果,并且此结果将合并(因为在我们的情况下,我们将结果相加)与其他pascalValue(i, j)调用,即pascalValue(i - 1, j),然后是i,j值。

并且这将一直发生,直到计算完所有调用并返回结果为止。

查看此SO answer on recursion以获得更好的理解。

关于java - Java双参数递归,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60387150/

10-11 10:44