用Python进行斐波那契练习的最佳答案是什么?
在Python中,这个斐波那契练习的最佳答案是什么 练习:斐波那契序列 编写一个函数,显示斐波那契函数的n个第一项 序列,定义如下:用Python进行斐波那契练习的最佳答案是什么?,python,recursion,fibonacci,Python,Recursion,Fibonacci,在Python中,这个斐波那契练习的最佳答案是什么 练习:斐波那契序列 编写一个函数,显示斐波那契函数的n个第一项 序列,定义如下: u0=1;u1=1 u(n+2)=u(n+1)+un 如果这只是问一个斐波那契码,我会这样写: def fibo_R(n): if n == 1 or n == 2: return 1 return fibo_R(n-1) + fibo_R(n-2) print(fibo_R(6)) 。。。但是,在本练习中,初始条件均为1和
- u0=1;u1=1
- u(n+2)=u(n+1)+un
def fibo_R(n):
if n == 1 or n == 2:
return 1
return fibo_R(n-1) + fibo_R(n-2)
print(fibo_R(6))
。。。但是,在本练习中,初始条件均为1和1,并且计算正向(+)。我不知道如何设置结束条件。我一直在寻找答案,但什么也找不到。如何回答这个问题?计算斐波那契序列的最佳方法是从开头开始循环,直到计算出第n个数字。递归会产生太多的方法调用,因为您要反复计算相同的数字 此函数计算第一个
n
斐波那契数,将其存储在列表中,然后打印出来:
def fibonacci(n):
array = [1]
a = 1
b = 1
if n == 1:
print array
for i in range(n-1):
fib = a + b
a = b
b = fib
array.append(fib)
print array
计算斐波那契数列的最佳方法是从开始处开始循环,直到计算出第n个数。递归会产生太多的方法调用,因为您要反复计算相同的数字 此函数计算第一个
n
斐波那契数,将其存储在列表中,然后打印出来:
def fibonacci(n):
array = [1]
a = 1
b = 1
if n == 1:
print array
for i in range(n-1):
fib = a + b
a = b
b = fib
array.append(fib)
print array
另一种递归方法只是为了表明事情可以以稍微不同的方式完成:
def fib2(n): return n if n < 2 else fib2( n - 1 ) + fib2( n - 2 )
def fib2(n):如果n<2,则返回n,否则fib2(n-1)+fib2(n-2)
另一种递归方法只是为了说明事情可以用稍微不同的方式完成:
def fib2(n): return n if n < 2 else fib2( n - 1 ) + fib2( n - 2 )
def fib2(n):如果n<2,则返回n,否则fib2(n-1)+fib2(n-2)
如果您想要一个超级内存高效的解决方案,请使用只按需生成下一个数字的生成器:
def fib_generator():
e1, e2 = 0, 1
while True:
e1,e2 = e2, e1+e2
yield e1
f = fib_generator()
print(next(f))
print(next(f))
print(next(f))
## dump the rest with a for-loop
for i in range(3, 50):
print(next(f))
def fibonacci():
i = 1
j = 1
while True:
yield i
x = i + j
i = j
j = x
递归解决方案是最优雅的,但速度很慢。Keiwan的循环对于大量元素来说是最快的
是的,绝对没有DSM正确观察到的全局。谢谢 如果您想要一个超级内存高效的解决方案,请使用只按需生成下一个数字的生成器:
def fib_generator():
e1, e2 = 0, 1
while True:
e1,e2 = e2, e1+e2
yield e1
f = fib_generator()
print(next(f))
print(next(f))
print(next(f))
## dump the rest with a for-loop
for i in range(3, 50):
print(next(f))
def fibonacci():
i = 1
j = 1
while True:
yield i
x = i + j
i = j
j = x
递归解决方案是最优雅的,但速度很慢。Keiwan的循环对于大量元素来说是最快的
是的,绝对没有DSM正确观察到的全局。谢谢 请注意,u(n+2)=u(n+1)+u(n
等同于u(n-1)+u(n-2)
,即您以前的代码仍然适用。根据定义,斐波那契数是根据它们的前辈定义的,不管你如何表述这个问题
解决此问题的一个好方法是定义一个按需生成斐波那契序列元素的函数:
def fib_generator():
e1, e2 = 0, 1
while True:
e1,e2 = e2, e1+e2
yield e1
f = fib_generator()
print(next(f))
print(next(f))
print(next(f))
## dump the rest with a for-loop
for i in range(3, 50):
print(next(f))
def fibonacci():
i = 1
j = 1
while True:
yield i
x = i + j
i = j
j = x
然后,您可以使用via,例如itertools.islice
,或者使用enumerate
跟踪您看到的数字数量:
for i, x in enumerate(fibonacci()):
if i > n:
break
print x
拥有一个生成器意味着您可以使用相同的代码来解决许多不同的问题(尽管效率很高),例如:
- 得到第n个斐波那契数
- 得到前n个fibonacci数
- 获取满足某个谓词的所有斐波那契数(例如,所有小于100的斐波那契数)
u(n+2)=u(n+1)+u(n
等同于u(n-1)+u(n-2)
,即您以前的代码仍然适用。根据定义,斐波那契数是根据它们的前辈定义的,不管你如何表述这个问题
解决此问题的一个好方法是定义一个按需生成斐波那契序列元素的函数:
def fib_generator():
e1, e2 = 0, 1
while True:
e1,e2 = e2, e1+e2
yield e1
f = fib_generator()
print(next(f))
print(next(f))
print(next(f))
## dump the rest with a for-loop
for i in range(3, 50):
print(next(f))
def fibonacci():
i = 1
j = 1
while True:
yield i
x = i + j
i = j
j = x
然后,您可以使用via,例如itertools.islice
,或者使用enumerate
跟踪您看到的数字数量:
for i, x in enumerate(fibonacci()):
if i > n:
break
print x
拥有一个生成器意味着您可以使用相同的代码来解决许多不同的问题(尽管效率很高),例如:
- 得到第n个斐波那契数
- 得到前n个fibonacci数
- 获取满足某个谓词的所有斐波那契数(例如,所有小于100的斐波那契数)