gpt4 book ai didi

java - 我可以请某人解释一下这个反转并显示数组的递归示例吗?我无法在脑海中描绘它

转载 作者:行者123 更新时间:2023-12-02 02:52:30 25 4
gpt4 key购买 nike

我正在尝试思考这个例子,但我只是不太明白它。

这似乎是一个奇怪的概念,因为我刚刚在我的程序中开始递归。这个例子是我周三期末考试的练习。

public class revArray
{
public static int arrayOfNum[] = {1,2,5,4,6};

public static void main(String[] args)
{
reverse(arrayOfNum, 0);
}

public static void reverse(int[] nums, int index)
{
if(index != nums.length)

//I feel like the index should have started as the length
//of the array and instead of +1 it should be -1

reverse(nums,index+1);

System.out.print(nums[index]);
}
}

我还有另一个反转字符串的例子,看起来应该是类似的。我很困惑。我不知道还能说什么。如果有人能帮我一把,我将非常感激。

最佳答案

在java中,方法被调用,在这个过程中,有一个callee方法和被调用方法。方法的每次调用都由Stack 中的一个条目支持。一旦被调用方法完成执行,执行控制就会返回到被调用者,并且执行被调用者的下一个操作。请记住,直到 called 方法未完成执行时,called 方法的执行就会停止(实际上它维护在 called 方法的入口下方)堆)。执行完成后,被调用方法的条目将从堆栈中弹出。

代码需要进行以下更正

if(index != nums.length -1) // condition should have a  '-1'. 

if(index != nums.length){
reverse(nums,index+1);
System.out.print(nums[index]);
}

我正在继续第一个。 (-1 条件)。

递归是一个方法调用自身的过程。 被调用者被调用 方法是相同的。现在,在您的代码中,index 的起始值为 0。

     if(index != nums.length)
reverse(nums,index+1); // execution control reaching this statement pushes the current instance of method execution in stack.

将每个调用的(相同)实例插入堆栈的过程,与每个先前调用的方法实例相比,索引值加 1,直到条件 index != nums.length -1 是正确的。到目前为止,任何方法都还没有到达下一个可执行的打印语句。

条件index != nums.length -1变为假的方法实例,控制到达打印语句并打印出nums[index-1] 。一旦完成,该方法实例的条目就会从堆栈中弹出,并且执行控制到达被调用者方法的打印语句,该方法现在位于该方法的顶部。堆。像这样,方法被弹出,并执行所有方法实例的打印语句,直到方法的所有条目都被弹出。

关于java - 我可以请某人解释一下这个反转并显示数组的递归示例吗?我无法在脑海中描绘它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43594550/

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