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)