bskay 发表于 2014-08-21 19:16

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]
查看完整版本: python 里面使用递归的一个笨办法,哈哈