使用变量的递归

2024-10-01 15:43:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在学习递归,我遇到了一个网站,提供解决某些问题的方法。其中一个问题是在数组中查找值并使用递归返回索引。提供的解决方案如下:

def searchRec2(A, k):    
   if A == []:        
      return -1    
   if A[0] == k:        
      return 0    
   recS = searchRec2(A[1:],k)    
   if recS == -1:     
      return -1    
   return recS + 1

我从这段代码中不明白的是,当代码使用变量recS来运行搜索的每个递归调用时,一旦在数组中找到相应的值,它就不会返回0,并且0将存储在recS。你知道吗

所以当它执行recS + 1的最后一个返回语句时,它不只是执行0+1即1吗?我不明白它怎么会得到1以外的值。(代码可以工作,它给出了我们在数组中查找的元素的索引。)


Tags: 方法代码元素returnif网站def数组
3条回答

对于这些类型的问题,最好用一个小例子来看看发生了什么。取A = [1,2,3]k = 3。(答案是2) 由于函数调用自身,因此会发生以下情况: Recursive Case Description

当找到值时,最后一次函数调用返回0。那么, 从第二次调用到最后一次调用返回1。 类似地,从第三个到最后一个调用返回2。(这是我们最初的电话)

因此,最终返回值为2。你知道吗

另一种方法是递归调用函数,直到找到k值。一旦找到您的值,它就停止调用新函数并开始返回值。这些返回跟随函数调用链,每次返回后增加1。你知道吗

现在您可以开始了解如何将其应用于更大的列表了!你知道吗

这段代码的工作原理是递归。每次在该位置找不到元素时,它都会不断地将变量recS的值增加1。如果没有找到元素并且它到达最后一个元素,那么它只返回-1。你知道吗

我强烈建议您使用PythonTutor来可视化您正在运行的代码。你知道吗

PythonTutor

函数searchRec检查列表头部的项,然后递归地调用列表的其余部分(尾部)。因此,如果该项位于列表的位置5,searchRec将递归调用自己5次(即递归深度为5)。最后一个调用返回0,上一个调用向其添加1,上一个调用向其添加另一个1。。。以此类推,返回第一个返回5的调用(我们称递归展开)。你知道吗

相关问题 更多 >

    热门问题