我正在尝试通过递归打印 Fibonacci系列。但是每次最后返回无并打印功能。
尝试了推入其他条件,但如果我想在那里结束该程序,则无法弄清楚要返回的内容。
我搜索了SO,发现了一些解决方案,但对我没有用。
帮助我。还告诉我哪个概念我不理解。
def Fibonacii(a,b,n):
if(n>=1):
sum=a+b
a=b
b=sum
return Fibonacii(a,b,n-1)
def main():
a=0
b=1
n=10
print(Fibonacii(a,b,n-2))
if __name__ == '__main__':
main()
答案 0 :(得分:1)
您的代码不起作用,因为您在n < 1
时没有处理这种情况,即基本情况。如果您想坚持使用递归函数,这是一个在线性空间中使用n
调用fibonacci_helper()
函数的解决方案。
def fibonacci_helper(a, b, n):
if n == 0:
return (a, b)
return fibonacci_helper(b, a+b, n-1)
def fibonacci(n):
return fibonacci_helper(0, 1, n)[0]
print([fibonacci(i) for i in range(10)])
# prints '[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]'
如果你想在内存中使用恒定空间的更有效的解决方案,那么@chepner提出的解决方案当然适合你的需求。
答案 1 :(得分:0)
返回值无关紧要,因为您的函数在生成时打印每个数字。
def Fibonacii(a, b, n):
if(n>=1):
sum=a+b
a=b
b=sum
print(sum)
Fibonacii(a, b, n-1)
Fibonacii(0, 1, 10)
但是,递归不是在Python中迭代的好方法。显式循环使用常量空间,而不是使用与n
成比例的内存:
def Fib(a, b, n):
while n > 0:
a, b = b, a + b # No temporary variable necessary
print(b)
n -= 1