Chinaunix

标题: python 里面使用递归的一个笨办法,哈哈 [打印本页]

作者: bskay    时间: 2014-08-21 19:16
标题: python 里面使用递归的一个笨办法,哈哈
举例:

把这个pascal的翻译为python的

function knapsack(k:integer):integer;
begin
    knapsack:=0;
    for  i:=1  to n do
        if k-w[i]>=0 then
        begin
            t:=knapsack(k-w[i])+v[i];
            if knapsack < t then knapsack:=t;
        end;
end;



class calc:
    def __init__(self):
        self.n = random.randint(5, 20)
        self.v = [random.randint(1, 100) for i in range(self.n)]
        self.w = [random.randint(1, 100) for i in range(self.n)]
        self.state = {}
        return
    def calc_k(self, k):
        r = [0,[]]
        for i in range(self.n):
            k1 = k - self.w[i]
            if k1 >= 0:
                t,p = self.state.get(k1)
                t = t+self.v[i]
                if r[0]<t:
                    r = [t, p+[i,]]
        self.state[k] = 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不能递归太深的限制





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2