【发布时间】:2014-03-27 04:29:27
【问题描述】:
我正在使用 Python 中的斐波那契数列(我知道使用 yield 的实现,但想使用递归来实现)并最终得到以下代码 sn-p:
def fib(start, leng):
""" Recursive Fibbo"""
# Should be lists
if type(start) == int:
start = [start]
# Escape route
if len(start) == leng:
print start
return start
# Run
else:
if int(start[-1]) == 0:
start.append(1)
else:
if len(start) == 1:
start.append(start[-1])
next_number = int(start[-1]) + int(start[-2])
start.append(next_number)
fib(start, leng)
现在,它是这样工作的:
>>> a = fib(0, 10)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
>>> type(a)
<type 'NoneType'>
>>>
它计算序列,最后打印出来……但是…… 我怎么能把它也返回列表?
是否可以不使用任何其他辅助函数或使用 yield 而不是任何外部库?
如果不是,为什么? (如果是,如何)?
谢谢! :)
【问题讨论】:
-
你知道,递归只是意味着一个函数调用自己。您仍然可以递归地实现它并使用
yield。然后,您将获得所有美妙的好处并且您只需调用list(fib(a, b))即可轻松创建list。 ;) -
还有建议的修复,您的代码仍然存在一些逻辑问题:例如
fib(6,10)显示[6, 6, 12, 18, 30, 48, 78, 126, 204, 330]。这是期望的行为吗? -
@Two-BitAlchemist 请向我们展示您的递归生成器(在 python2.x 中作为 OP 的代码)。
-
好吧,这是一个紧张的玩笑。我试图提倡使用
yield,并建议这更多是你为了好玩而做的事情,看看你是否可以,而不是使用。 :P -
哦,我不了解 Python 2.x 生成器。 yield 记录在 Python 2.2 中,并带有
__future__导入。
标签: python recursion fibonacci