首页 > 解决方案 > 为什么递归函数两次考虑数组中的最后一个元素?

问题描述

试图理解递归函数,因此创建了这个程序,但输出不正确。想了解我在这里做错了什么

class Recursive:
    
    def __init__(self, arr):
        self.arr = arr
        self.sum = 0
        
    def sumRecursive(self):
    
        if len(self.arr) == 0:
            return self.sum
        self.sum = self.arr.pop(0)
        return self.sum + self.sumRecursive()
    
def main():
    recur = Recursive([1,2,3])
    print(recur.sumRecursive())

main()

输出:9

标签: pythonclassrecursion

解决方案


有两种类型的递归需要考虑:尾递归,其中单个递归调用的返回值按原样返回,以及“常规”递归,您可以对递归调用的返回值做一些事情。 ) 在返回之前。

你正在将两者结合起来。您可以将列表中的一个值添加到递归总和,不使用累加器:

def non_tail_recursive(self):
    if len(self.arr) == 0:
        return 0
    return self.arr.pop(0) + self.non_tail_recursive()

或者您使用累加器:

def tail_recursive(self):
    if len(self.arr) == 0:
         return self.sum

    self.sum += self.arr.pop(0)
    return self.tail_recursive()

推荐阅读