【发布时间】:2018-04-09 06:36:48
【问题描述】:
我对 python 比较陌生,最近了解了递归。当被要求找到一个数字的阶乘时,我使用了这个:
def factorial(n):
product = 1
for z in xrange(1,n+1):
product *= z
return product
if __name__ == "__main__":
n = int(raw_input().strip())
result = factorial(n)
print result
然后,因为任务是使用递归,所以我创建了一个使用递归的解决方案:
def factorial(n):
if n == 1:
current = 1
else:
current = n*(factorial(n-1))
return current
if __name__ == "__main__":
n = int(raw_input().strip())
result = factorial(n)
print result
两者似乎产生了相同的结果。我的问题是,如果我可以使用 for 循环,我为什么还要使用递归?是否存在我不能只创建 for 循环而不使用递归的情况?
【问题讨论】:
-
所有递归都可以重构为使用循环和其他类似的结构。递归有时会更容易阅读和理解。
-
递归非常适合导航树数据结构之类的事情。你如何导航一棵树?从根开始,导航树的左子节点,导航树的右子节点。你如何引导孩子? 与浏览根目录的方式完全相同。 所以在这里使用递归很方便。堆栈跟踪您在树中的位置;您不必明确地跟踪它。当你想出一个适合以这种方式解决的问题的递归解决方案时,它几乎就像魔术一样。 “就是这些吗?”是的,是的。
-
欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 on topic 和 how to ask 在这里申请。网上有很多关于这个的讨论...
标签: python python-2.7 loops recursion