gpt4 book ai didi

java - 使用 2 次递归调用解析堆栈

转载 作者:行者123 更新时间:2023-12-02 09:54:40 28 4
gpt4 key购买 nike

我正在尝试刷新我的递归技能,到目前为止一切都很顺利。但是,我从未见过一个字符串是两次递归调用的值的问题。第一个递归调用是否会忽略语句的其余部分?解析时是否仍考虑第二次递归调用?我尝试跟踪它,假设像 return 语句一样,第一个递归调用会打破循环。因此,我的印象是 if 语句中的其余代码不会被考虑在内。

public class Example {
public static String encrypt(String word) {
int pos = word.length() / 2;
if (pos >= 1)
word = encrypt(word.substring(pos)) + encrypt(word.substring(0,pos));
return word;
}

public static void main(String []args){
System.out.println(encrypt("SECRET"));
}
}

虽然我的预期输出是“TETRET”,但实际输出应该是“TERCES”。有人介意解释我的追踪或逻辑哪里出了问题吗?

最佳答案

I tried tracing it under the assumption that like a return statement, the first recursive call would break the loop.

这是不正确的。两者都将受到评估。

word = encrypt(word.substring(pos)) + encrypt(word.substring(0,pos));

第一个递归调用将被插入堆栈,第二个递归调用将保存在堆栈上,以便在第一个调用返回到调用堆栈后进行评估。这是一个直观的表示:

         1
/ \
2 5
/ \
3 4

这是假设 345 达到基本情况,因此不继续递归

关于java - 使用 2 次递归调用解析堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56086483/

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