如何在Python递归函数的末尾返回一个列表

0 投票
2 回答
2590 浏览
提问于 2025-04-18 00:06

我在用Python玩斐波那契数列(我知道用yield的实现方法,但我想用递归来实现),最后写出了以下这段代码:

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或任何外部库呢?

如果不行,为什么?(如果可以,那怎么做呢?)

谢谢!:)

2 个回答

3

你最后一行也需要加一个 return

return fib(start, leng)

如果没有这个,来自“逃生路线”的返回值就无法传回去。

3

只需要把最后一行改成这样:

 return fib(start,  leng)

这样做会沿着递归的路径继续进行“下一步”的工作,并返回最终的结果,这个结果是基于你在代码中早些时候定义的基准情况,作为你的退出方式:

# Escape route
if len(start) == leng:
    print start
    return start

一旦你在退出方式中遇到返回,返回的结果就会沿着调用栈向上回传,每次调用return fib(start, leng)都会把完整的答案返回给自己。当调用栈回到你最开始调用这个函数的地方(在其他地方调用的),函数就真正完成了,并返回你期望的值。

撰写回答