Python 用贪婪方法实现斐波那契级数?

Python 用贪婪方法实现斐波那契级数?,python,algorithm,dynamic-programming,fibonacci,greedy,Python,Algorithm,Dynamic Programming,Fibonacci,Greedy,我已经使用递归实现了斐波那契级数: def fibonacci(n): if n==0: return 0 elif n==1: return 1 else: return fibonacci(n-1) + fibonacci(n-2) 我还使用动态规划实现了它: def fibonacci(n): result = [0, 1] if n > 1: for i in ra

我已经使用递归实现了斐波那契级数:

def fibonacci(n): 
    if n==0: 
        return 0
    elif n==1: 
        return 1
    else: 
        return fibonacci(n-1) + fibonacci(n-2)
我还使用动态规划实现了它:

def fibonacci(n): 
    result = [0, 1]

    if n > 1:
        for i in range(2, n+1):
            result.append(result[i-1] + result[i-2])
    return result[n]

我想用贪婪的方法实现它。我无法用贪婪的语言来思考它。请提供解决此问题的贪婪方法

你说“贪婪”这个词,我不明白你想说什么。但有以下几种方法:

示例1:使用循环技术 示例2:使用递归 示例3:使用生成器 示例4:使用备忘录 fib()如例1所示。 示例5:使用memonization作为装饰器
我认为贪婪范式不太适合这个问题。局部(但不一定是全局)最优子解是什么?动态规划方法可以改进以获得恒定内存,您只需要存储“最后两个”值,而不是所有值的列表。FWIW,由于双重递归,您的第一个解决方案即使是适度的
n
,也非常缓慢,除非使用备忘录,例如
functools.lru\u cache
。正如其他人所说,贪婪算法在这里不适用。为什么不做一些更实际的事情,例如使用fibo(2n)和fibo(2n-1)公式。这些公式对于较小的
n
来说是很慢的,但是如果实施得当,它们对于较大的
n
来说是非常令人印象深刻的。您的代码基本上是好的,但一般来说,回答您不理解的问题不是一个好主意。你可以在维基百科上读到,你显然在创造所有这些解决方案上付出了一些努力,但这并没有回答问题。
 def fib(n):
     a,b = 1,1
     for i in range(n-1):
      a,b = b,a+b
     return a
    print fib(5)
def fibR(n):
 if n==1 or n==2:
  return 1
 return fibR(n-1)+fibR(n-2)
print fibR(5)
a,b = 0,1
def fibI():
 global a,b
 while True:
  a,b = b, a+b
  yield a
f=fibI()
f.next()
f.next()
f.next()
f.next()
print f.next()
def memoize(fn, arg):
 memo = {}
 if arg not in memo:
  memo[arg] = fn(arg)
  return memo[arg]
fibm = memoize(fib,5)
print fibm
class Memoize:
 def __init__(self, fn):
  self.fn = fn
  self.memo = {}
 def __call__(self, arg):
  if arg not in self.memo:
   self.memo[arg] = self.fn(arg)
   return self.memo[arg]

@Memoize
def fib(n):
 a,b = 1,1
 for i in range(n-1):
  a,b = b,a+b
 return a
print fib(5)