为什么函数返回None?

时间:2018-05-02 18:19:19

标签: python recursion

我正在尝试通过递归打印 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()

2 个答案:

答案 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