斐波那契序列的Python3递归-列出
我试着在一行上按照Fib序列列出一个数字列表。我使用的是递归方法Fib(n)=Fib(n-1)+Fib(n-2),当我使用:斐波那契序列的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()来反转列表,使数字按
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)))