【发布时间】:2013-09-27 17:25:00
【问题描述】:
我编写了一个程序,该程序基本上通过读取它创建的字典来计算斐波那契(给定 {0:0, 1:1} 开始)。显然,如果字典中没有它,它将创建直到它出现,然后再调用,因此它不必一遍又一遍地执行相同的序列。我遇到的困难是使用 Counter 对象来跟踪算法执行的指令(这样我就可以绘制随着初始 n 增加的调用次数的图表)。之前从未使用过类 Counter 或 memoization,所以最后我有点迷失了。
dic = {0:0, 1:1}
def main():
n = int(input("Number to Fibonacci?"))
fib(n)
print(dic[n])
Counter()
memoization(n, Counter, dic)
def fib(n):
if n in dic:
return dic[n]
else:
if n < 2:
dic[n] = n
else:
dic[n] = fib(n-2) + fib(n-1)
return dic[n]
class Counter():
def __init__(self):
self._number = 0
def increment(self):
self._number += 1
def __str__(self):
return str(self._number)
def print():
print(str(self._number))
def memoization(n, Counter, dic):
if n in dic:
return dic[n]
else:
c.increment()
main()
这就是我所拥有的,但老实说,我不知道从哪里开始,非常感谢任何帮助!
【问题讨论】:
-
我真的不明白你从哪里得到这个
Counter课程或者你为什么要这样做。现在它只代表一个你正在递增的整数。大部分代码都被破坏了。您可能会考虑阅读更多关于如何在 Python 中进行记忆化的内容,而不是沉迷于使用这个无用的Counter类做任何事情。如果您搜索 SO,已经有很多关于如何在 Python 中编写斐波那契的答案,包括记忆版本。虽然这对我来说听起来像是家庭作业,所以我真的不知道该告诉你什么......
标签: python recursion counter fibonacci