[英]Python recursion with dictionary?
I have a recursion function defined as follows:我有一个递归函数定义如下:
def myfunc(n, d):
if n in d:
return d[n]
else:
return myfunc(n-1,d) + myfunc(n-2,d)
and if I run it with the following parameters:如果我使用以下参数运行它:
myfunc(6, {1:1,2:2})
I get this 13, but I expected the sum to be 8?我得到了 13,但我预计总和是 8? Since the recursion would look something like this:
由于递归看起来像这样:
myfunc(5,d) + myfunc(4,d)
myfunc(4,d) + 2
myfunc(3,d) + 2
2 + 2
which equals = 2 + 2 + 2 + 2 = 8?等于 = 2 + 2 + 2 + 2 = 8? Could someone explain?
有人能解释一下吗? Thank you!
谢谢!
myfunc(6,d) == myfunc(5,d) + myfunc(4,d)
== myfunc(4,d) + myfunc(3,d) + myfunc(3,d) + myfunc(2,d)
== (myfunc(3,d) + myfunc(2,d)) + (myfunc(2,d) + myfunc(1,d)) + (myfunc(2,d) + myfunc(1,d)) + myfunc(2,d)
== ((myfunc(2,d) + myfunc(1,d)) + myfunc(2,d)) + (myfunc(2,d) + myfunc(1,d)) + (myfunc(2,d) + myfunc(1,d)) + myfunc(2,d)
== 2 + 1 + 2 + 2 + 1 + 2 + 1 + 2
== 13
or if you prefer:或者,如果您更喜欢:
myfunc(1,d) == 1
myfunc(2,d) == 2
myfunc(3,d) == myfunc(2,d) + myfunc(1,d) == 2 + 1 == 3
myfunc(4,d) == myfunc(3,d) + myfunc(2,d) == 3 + 2 == 5
myfunc(5,d) == myfunc(4,d) + myfunc(3,d) == 5 + 3 == 8
myfunc(6,d) == myfunc(5,d) + myfunc(4,d) == 8 + 5 == 13
This is the Fibonacci sequence .这就是斐波那契数列。
You are picturing your recursion falsely.你错误地描绘了你的递归。 It looks like this:
它看起来像这样:
myfunc(6, d)
myfunc(5, d) + myfunc(4, d)
myfunc(4, d) + myfunc(3, d) + myfunc(3, d) + myfunc(2, d)
myfunc(3, d) + myfunc(2, d) + myfunc(2, d) + myfunc(1, d) + myfunc(2, d) + myfunc(1, d) + 2
myfunc(2, d) + myfunc(1, d) + 2 + 2 + 1 + 2 + 1 + 2
2 + 1 + 2 + 2 + 1 + 2 + 1 + 2
which is 13
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.