【问题标题】:Why Tail recursion of factorial returns none? [duplicate]为什么阶乘的尾递归不返回? [复制]
【发布时间】:2015-12-21 07:09:03
【问题描述】:

我使用尾递归进行阶乘,它返回“无” - 为什么

def fact(n, k):
    print "n = %d k = %d" % (n,k)
    if n == 1:
        print "k final = ", k
        return k

    else:
#        print n
        print k
        fact(n-1, k*(n-1) )

a =(fact(4, 4) ) 
print a

【问题讨论】:

  • else: 子句中没有返回任何内容。
  • 一个在 Python 中处理递归的问题会产生更好的重复。
  • @chepner 几乎所有语言的模式都是一样的。例外是像 Lisp 这样的语言,其中函数中的最后一个表达式会自动返回。所以我没有为每种语言收集类似的问题。
  • @Barmar - 但我在 if 子句中有一个 return k - 我认为它会返回 k - 为什么不呢?
  • 没有if 循环这样的东西。循环使用whilefor 完成。

标签: python recursion


【解决方案1】:

您没有在else 子句中返回值 -

else:
    fact(n-1, k*(n-1) )

这应该是

else:
    return fact(n-1, k*(n-1) )

【讨论】:

  • 它给出了正确的答案——但我在 if 子句中有一个 return k——我认为它会返回 k——为什么不呢?
  • @user5331677 是的,每次你用n==1 调用它都会起作用。对于2,它将递归到1,它将k返回给原始调用者,后者丢弃返回的值并返回None。对于 3,原始调用者得到 None,它会忽略它,但它自己在结束时返回 None。每个尾部位置都需要返回一些东西才能工作,而不仅仅是第一个。
  • @Sylwester - 谢谢
猜你喜欢
  • 1970-01-01
  • 2023-03-30
  • 2019-10-07
  • 2018-10-16
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多