gpt4 book ai didi

java - 了解 Java 中的递归

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:51:06 25 4
gpt4 key购买 nike

我很难理解以下基于 Java 递归算法的代码。我不明白,xy 在相互调用时有什么不同的值?我试图通过在代码中调用 System.out.print() 来获得正确的值,但仍然没有得到任何帮助。

public class RecursionExample
{

private static int[][] arr={
{3},
{7, 4},
{2, 4, 6},
{8 ,5, 9, 3}
};

public static int maxSum(int[][] graph, int x, int y, int sum) {
if (x == 3)
{
return sum+graph[x][y];
}
int max= Math.max(maxSum(graph, x+1, y, sum), maxSum(graph, x+1, y+1, sum));

sum += graph[x][y];
return sum+max;
}

public static void main(String[] ar)
{
System.out.println(maxSum(arr,0,0,0));
}
}

我不是编程高手,我正在尝试通过实践来学习 Java。感谢您的帮助。

最佳答案

本质上,这会一直调用自身,直到您到达第三次迭代 (x==3)。

所以,这是流程(减去 max 中对 maxSum 的两次调用...为简单起见)(每个缩进都是对 maxSum< 的调用):

x = 0
y = 0
sum = 0

x != 3

x = 1
y = 0
sum = 0

x != 3

x = 2
y = 0
sum = 0

x != 3

x = 3
y = 0
sum = 0

x == 3
return 0 + 8 //graph[3][0] == 8

max = 8 //previous return
sum = 0 + 2 //graph[2][0] == 2
return 10 //max + sum == 8 + 2 == 10

max = 10
sum = 0 + 7 //graph[1][0] == 7
return 17

max = 17
sum = 0 + 3 //graph[0][0] == 3
return 20

关于java - 了解 Java 中的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1247945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com