|
|
1
5
每次方法调用自身时,它都会缩小
一个例子
lo = 0, hi = 2
lo != hi -> call findShortestString(paths, 1, 2)
lo = 1, hi = 2
lo != hi -> call findShortestString(paths, 2, 2)
lo = 2, hi = 2
lo == hi -> return lo (=2)
lo = 1, hi = 2, minindex = 2
length of "path2" < length of "longpath3" -> return lo (= 1)
lo = 0, hi = 2, minindex = 1
length of "p1" < length of "path2" -> return lo (= 0)
我试图通过增加缩进量来说明每个递归级别的变量值。在每次递归调用开始时,前面的值
*除非首先是“你好”,我想。。。 |
|
|
2
2
以下是执行的一个剧本:
你打电话来
如果lo不等于hi,事情继续。否则它们在这里停止,函数返回。
一旦你打电话
只有当一个函数实例
控件切换到之前的函数实例,该实例将
如果
每个被调用的函数现在只在方法调用之后执行代码,因为方法不会被再次调用。我们正在展开一堆调用。现在所有的返回都来自最后两个语句,因为顶部的代码不会再次执行。注意只有一个函数实例返回代码的顶部,从而终止while循环。在递归调用之后,所有剩余部分都以函数部分中的return语句结束。 最后,最后一个函数返回,然后返回到最初调用该函数的代码。 下面是代码实际工作的可读性更强的版本:
在递归调用之前的代码中,只会创建一个调用链,直到
当它们展开时,每个函数实例都会比较索引lo处字符串的长度,并将前一个索引处的字符串长度与最短的字符串进行比较。
如果
代码可以更好地重写如下:
|
|
|
3
1
想想一堆。每次调用递归方法时,都会在堆栈顶部放置一个新的“框架”。框架包含每个变量自己的“槽”,独立于下面框架中的槽。
最终,将创建一个新的框架,其中
|
|
|
4
0
每次
如果有一个调用堆栈有10个findShortestString级别,
|
|
5
0
这是一个非常混乱的递归函数。但你一般都是对的。每次调用findShortestString()都会将函数推送到堆栈上。它会一直这样直到lo==hi。在这一点上,堆栈被解绕,相应的递归调用将被分配给它们相应的int。
在这个函数中,似乎只有
|
|
|
6
0
为了陈述
要计算,方法调用
|
|
|
7
0
基本上,函数的执行在调用return语句时结束。在一个被称为“不再存在”(或“存在”)的返回语句之后的所有事物。 因此,当第一个if语句为false时,局部变量MNEDIQUE只存在于FUNCHOLTEST字符串函数的执行中。 独立处理findShortestString函数的每次执行,无论是递归调用还是从代码中的其他地方调用。i、 e.findShortestString函数的不同执行可能在不同的路径返回,并具有自己的值和局部变量。根据输入值,它们可能在第3、6或7行返回。 Min DUNDEX只存在于运行4行的执行中,并且它被分配了FixSuthTestStand(路径,LO + 1,HI),如果代码是正确的,则保证它有一个值,否则将得到无限递归,导致堆栈溢出(双关非故意)。 |
|
|
MMedina · 将powershell应用于子文件夹 1 年前 |
|
|
YorSubs · Linux中遍历目录的时间不同方法[关闭] 1 年前 |
|
Romn · 在递归函数中键入元组或元组列表 2 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 2 年前 |
|
|
Ack · 尝试迭代JSON数据以匹配用户输入 2 年前 |