-2

我希望能够递归地传递count或递增计数,然后将其传递给我的递归。但是,我知道我必须声明count = 0能够在递增时使用它。我仍在学习 python,我发现很难递归地增加计数。有人可以帮我解决这个问题吗?

我知道目前我的代码是错误的,因为我进行的每次递归,count 都会重新发送为 0。我不想将 count 设置为第三个参数,因为我觉得这似乎没有必要。

我的代码:

def getNth(head, n):
    count = 0
    if count == n:
        count += 1
        return head.value
    else:
        if head.next is not None:
            getNth(head.next,n)
        else:
            print 'not in linked list'
4

2 回答 2

2

倒数而不是向上数。

def getNth(head, n):
    if n == 0:
        return head.value
    return getNth(head.next, n - 1)

然而,这在实践中会表现得很糟糕,如果你的列表有任何合理的长度,你会得到一个堆栈溢出。函数式编程风格通常不是好的 Python 风格(例如,尾递归不是 Python 的一个特性)。

我只是把循环写出来。

def getNth(head, n):
   for _ in xrange(n):
       head = head.next
   return head.value
于 2013-10-11T06:45:55.473 回答
1

这是在 python 中干净执行的递归中的常见模式,因此值得一提。

方法允许使用关键字参数,这对于跟踪递归深度很有用。对方法签名的更改是微不足道的:

def getNth(head, n, count=0):

0 是 的默认参数count。只需在您的初始调用中忽略它(或使用 明确调用它count=0),您就可以了。getNth然后,您可以轻松地递归调用getNth(*args, count + 1).

我现在应该注意到,我已经解释过,python 中的递归非常慢。如果您完全关心性能,那么您应该更喜欢迭代解决方案(通常涉及生成器)而不是递归解决方案。

于 2013-10-11T06:58:32.860 回答