Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Recursion 难以理解多个递归调用_Recursion - Fatal编程技术网

Recursion 难以理解多个递归调用

Recursion 难以理解多个递归调用,recursion,Recursion,在“a”完成调用之前不会执行?当流到达'b'并开始递归调用时,它是否影响a=max(arr,first,mid)-它将应用不同的值到 我在寻找最大值的上下文中的理解是,a将在上半部分找到最大元素,b将在下半部分找到最大元素,但我不明白当if(a每个递归调用都有一个较小的非负值last first。因此,如果第一个调用的非负值last first,则包括第一个调用在内的每个调用都会终止 如果last==first,则返回范围内的唯一元素作为最大值 否则,它返回前半部分(a)最大值和后半部分(b)最

在“a”完成调用之前不会执行?当流到达'b'并开始递归调用时,它是否影响
a=max(arr,first,mid)-它将应用不同的值到


我在寻找最大值的上下文中的理解是,a将在上半部分找到最大元素,b将在下半部分找到最大元素,但我不明白当
if(a每个递归调用都有一个较小的非负值last first。因此,如果第一个调用的非负值last first,则包括第一个调用在内的每个调用都会终止

如果last==first,则返回范围内的唯一元素作为最大值

否则,它返回前半部分(a)最大值和后半部分(b)最大值中的较大值


在任何一种情况下,最大值都是正确计算的,没有其他情况。

您试图通过一步一步地跟踪它来理解它是如何工作的,一路追踪每一个调用。不要这样做,这会让人困惑

查看一个调用的作用,而不必担心当前调用
max()
调用的函数中会发生什么。是的,它会调用自身,甚至会调用两次。这两个调用都是返回值的函数调用,就当前调用
max()而言
,就这一点而言,它们可能只是数字

如果我将分配
a
b
的行替换为:

b=max(arr, mid+1,last);     
if (a<b) return b;
    return a;`
a = 13;
b = 42;
那么你就不会有任何困难理解它的作用。如果我用这个替换它们:

b=max(arr, mid+1,last);     
if (a<b) return b;
    return a;`
a = 13;
b = 42;
那你也不会有问题,递归版本也没什么不同


像这样的递归函数的工作原理是将一个大问题分解成更小的子问题,解决子问题,并结合解决方案来解决这个大问题。它使用自身来解决子问题,如果我们没有基本情况,就会有一个障碍-到了一个点,你就不能进一步细分问题了,你需要另一种方法来解决这些小的子问题。但这并不是一个很大的障碍,因为一个太小而无法再分割的子问题很容易解决。基本情况只是注意到我们有一些容易直接解决和/或无法再进一步分割的问题,并对其进行处理。

简单的答案是:
a
将获得ma数组下半部分的x值和
b
将获得数组上半部分的最大值,最后函数将返回
a
b
之间的较高值。总体结果是数组中的最大值。我理解这一点,正如我在问题中所述,我只是不理解递归部分当然,要回答您关于下一条语句对上一条语句的影响的问题,取决于变量
a
是如何定义的。如果
a
是全局变量或静态变量,那么它将受到影响,因为下一条语句将递归并设置全局变量
a
的值。要防止这种情况发生,请必须将
a
b
定义为局部变量。在shirt中,当
a
b
为局部变量时,分配给它们的值仅限于该函数调用实例。当
a
b
为全局变量时,每次调用函数时都会设置它们的值(包括递归调用)。感谢您解决了这个问题,它们是本地的。但是函数如何在a或b中找到最大值?例如,在a中,它不只是递归调用自己,直到它返回它的第一个元素(如基本情况所示),我不明白它何时检查以在a或b中找到最大元素。