python 里面使用递归的一个笨办法,哈哈
举例:把这个pascal的翻译为python的
function knapsack(k:integer):integer;
begin
knapsack:=0;
fori:=1to n do
if k-w>=0 then
begin
t:=knapsack(k-w)+v;
if knapsack < t then knapsack:=t;
end;
end;
class calc:
def __init__(self):
self.n = random.randint(5, 20)
self.v =
self.w =
self.state = {}
return
def calc_k(self, k):
r = ]
for i in range(self.n):
k1 = k - self.w
if k1 >= 0:
t,p = self.state.get(k1)
t = t+self.v
if r<t:
r = ]
self.state = r
return r
def main(self,m,n,w,v):
self.n,self.w,self.v = n,w[:],v[:]
self.state.clear()
r = None
for i in range(m+1):
r = self.calc_k(i)
return r
用了一个 正向顺序求1...n保留中间结果的方法,绕开了python不能递归太深的限制
页:
[1]