首页 > 解决方案 > 使用变量递归

问题描述

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

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.

那么当它执行最后一个 return 语句时recS + 1,它不只是在执行 0 + 1 即 1 吗?我不明白它是如何获得除 1 之外的值的。(代码工作它给出了我们在数组中寻找的元素的索引。)

标签: pythonpython-3.x

解决方案


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

当找到该值时,从最后一个函数调用返回 0。然后,从第二次到最后一次调用返回 1。同样,从第三次到最后一次调用返回 2。(这是我们最初的电话)

因此,最终收益为 2。

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

您现在可以开始了解这如何适用于更大的列表!


推荐阅读