斐波那契序列的Python3递归-列出

斐波那契序列的Python3递归-列出,python,list,recursion,fibonacci,Python,List,Recursion,Fibonacci,我试着在一行上按照Fib序列列出一个数字列表。我使用的是递归方法Fib(n)=Fib(n-1)+Fib(n-2),当我使用: return fib(n-1)+fib(n-2) 我如何循环并给我一个列表?例如: [1,1,2,3,5,8,13]如果我输入:7用于n 好的,所以在某些方面我已经修复了它。 我现在要求用户输入一个值,比如x,然后在while循环中使用。它通过递归fib函数传递x值,将这个新值附加到一个列表中,然后将f减1。 然后我使用list.reverse()来反转列表,使数字按

我试着在一行上按照Fib序列列出一个数字列表。我使用的是递归方法Fib(n)=Fib(n-1)+Fib(n-2),当我使用:

return fib(n-1)+fib(n-2)
我如何循环并给我一个列表?例如:
[1,1,2,3,5,8,13]
如果我输入:
7
用于
n


好的,所以在某些方面我已经修复了它。 我现在要求用户输入一个值,比如x,然后在while循环中使用。它通过递归fib函数传递x值,将这个新值附加到一个列表中,然后将f减1。 然后我使用list.reverse()来反转列表,使数字按升序显示,然后打印列表。 但是这个列表在每个数字之间都有空格,我不希望这样。
有解决办法吗

显而易见的解决方案是:

l = []
for i in range(n):
    l.append(fib(i))
然而,这将是相当低效的。另一种方法是修改递归函数以返回斐波那契数列表,直到n:

def fib(n):
    if n <= 0:
        raise ValueError
    elif n == 1:
        return [1]
    elif n == 2:
        return [1, 1]
    else:
        prev = fib(n-1)
        return prev + [prev[-2] + prev[-1]]
def fib(n):

如果n明显的解决方案是:

l = []
for i in range(n):
    l.append(fib(i))
然而,这将是相当低效的。另一种方法是修改递归函数以返回斐波那契数列表,直到n:

def fib(n):
    if n <= 0:
        raise ValueError
    elif n == 1:
        return [1]
    elif n == 2:
        return [1, 1]
    else:
        prev = fib(n-1)
        return prev + [prev[-2] + prev[-1]]
def fib(n):

如果n请尝试以下代码,并让我知道它对您有帮助。关于生成器,您可以找到帮助和


试试下面的代码,让我知道它对你有帮助。关于发电机,你可以找到帮助和


比d-coder版本稍微精简一些:

def fib(n):
    a,b = 1,1
    for i in xrange(n):
        yield a
        a,b = b,a+b

>>> list(fib(11))
>>> [1,1,2,3,5,8,13,21,34,55,89]

比d-coder版本稍微精简一些:

def fib(n):
    a,b = 1,1
    for i in xrange(n):
        yield a
        a,b = b,a+b

>>> list(fib(11))
>>> [1,1,2,3,5,8,13,21,34,55,89]
迭代器是“最具Python风格的解决方案”

然后像这样使用它:

# print starting at 0
for i in Fib(0, 5):
    print i
0
1
1
2
3

# print starting at 1
for i in Fib(1, 6):
    print i
1
1
2
3
5

# make a list
list(Fib(end=10))
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
迭代器是“最具Python风格的解决方案”

然后像这样使用它:

# print starting at 0
for i in Fib(0, 5):
    print i
0
1
1
2
3

# print starting at 1
for i in Fib(1, 6):
    print i
1
1
2
3
5

# make a list
list(Fib(end=10))
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
递归版本,用于性能:

def fib(n, hash = {0:1, 1:1}):
    if n not in hash:
        hash[n] = fib(n-1) + fib(n-2)
    return hash[n]
测试:

>>> print(list(fib(i) for i in range(7)))
[1, 1, 2, 3, 5, 8, 13]
>>> print(list(fib(i) for i in range(11)))
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
递归版本,用于性能:

def fib(n, hash = {0:1, 1:1}):
    if n not in hash:
        hash[n] = fib(n-1) + fib(n-2)
    return hash[n]
测试:

>>> print(list(fib(i) for i in range(7)))
[1, 1, 2, 3, 5, 8, 13]
>>> print(list(fib(i) for i in range(11)))
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

你能给我们看看你的代码吗?我从来没有使用过yield,你能推荐一个好的文档来解释如何使用它吗?它会以上面的格式输出吗?要一张单子吗?e、 我已经发布了我的答案。这里有一篇关于收益率的文章:你能给我们看看你的代码吗?我从来没有使用过收益率,你能推荐一个好的文档来解释如何使用它吗?它会以上面的格式输出吗?要一张单子吗?e、 我已经发布了我的答案。这里有一篇关于收益率的文章:好的,随着它的发展,我已经得到了标准的递归方法,我要求用户提供一个第n个fib数,我们称之为x。然后我得到了一个while循环,条件x>0:print(fib(x))并将f减量1。。。这给了我一个列输出?我如何使用像list这样的函数来实现它?list接受任何序列,甚至是一个“生成器”(请参见我在OP中的链接),因此它为您执行“for…append”。这里我没有使用递归,只是循环并返回每个序列值。好的,这样我就得到了标准的递归方法,我要求用户提供一个第n个fib数,我们称之为x。然后我得到了一个while循环,条件x>0:print(fib(x))并将f减量1。。。这给了我一个列输出?我如何使用像list这样的函数来实现它?list接受任何序列,甚至是一个“生成器”(请参见我在OP中的链接),因此它为您执行“for…append”。这里我没有使用递归,只是循环并返回每个序列值。好的,这样我就得到了标准的递归方法,我要求用户提供一个第n个fib数,我们称之为x。然后我得到了一个while循环,条件x>0:print(fib(x))并将f减量1。。。这给了我一个列输出?如何使用类似list的函数使其成为您所拥有的?我能不能不只是打印(list(fib(x)),好吧,这样我就有了标准的递归方法,我要求用户输入第n个fib数字,我们称之为x。然后我得到了一个while循环,条件x>0:print(fib(x))并将f减量1。。。这给了我一个列输出?如何使用类似list的函数使其成为您所拥有的?我能不能不做打印(列表(fib(x)))