我希望能够递归传递count
或递增计数,然后将其传递给我的递归。但是,我知道我必须声明count = 0
能够在递增时使用它。我还在学习python,我发现很难递归递增计数。有人可以帮我这个吗?
我知道目前我的代码是错误的,因为我做的每次递归,count都将重新发送到0.我不想将count设置为第3个参数,因为我觉得好像没有必要。
我的代码:
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'
答案 0 :(得分: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
答案 1 :(得分:1)
这是在python中干净执行的递归中的常见模式,因此值得一提。
方法允许使用关键字参数,这对于跟踪递归深度非常有用。对方法签名的更改很简单:
def getNth(head, n, count=0):
0是{em>默认参数到count
。只需在初始调用中将其保留(或使用count=0
明确调用它),就可以了。然后,您可以使用getNth
轻松递归调用getNth(*args, count + 1)
。
我现在应该注意到我已经解释过python中递归的速度很慢。如果你完全关心性能,你应该倾向于迭代解决方案(通常涉及生成器)而不是递归解决方案。