试图更好地理解此递归问题中的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/