Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python进行斐波那契练习的最佳答案是什么?_Python_Recursion_Fibonacci - Fatal编程技术网

用Python进行斐波那契练习的最佳答案是什么?

用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和

在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和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的斐波那契数)


在python主站点中,您编写了一个函数,只获取第n个元素。他们要求第一个n,所以你要重复大量的工作来计算每个元素,而你可以在之前的结果的基础上继续。一个词:记忆化。对定义斐波那契序列的不同方法进行了相关讨论。在python主站点中,您编写了一个函数,只获取第n个元素。他们要求第一个n,所以你要重复大量的工作来计算每个元素,而你可以在之前的结果的基础上继续。一个词:记忆化。对定义斐波那契序列的不同方法进行了相关的讨论。有一种方法是公式,它使用O(1)内存和时间。我猜exsercise(我不会拼写)是指递归方式。任务是计算前n个斐波那契数,而不仅仅是第n个数。仅用n个元素填充列表需要O(n)@AmitGold在练习描述中没有要求使用递归。有一种方法是公式,它使用O(1)内存和时间。我猜exsercise(我不会拼写)是指递归方式。任务是计算前n个斐波那契数,而不仅仅是第n个数。单独用n个元素填充列表需要O(n)@AmitGold在练习描述中没有要求使用递归。为什么要使用全局变量?旁注:使用全局变量通常会很慢;一个类会更好。为什么要使用全局变量?旁注:使用全局变量通常会慢一些;上课会更好。我认为你的答案是最好的答案,因为你提到“u_un(n+2)=u_n(n+1)+u_n相当于u_n=u_n(n-1)+u_n(n-2)”,初始条件是I=1,j=1。我太喜欢r了