递归实现总结

2017-09-28  本文已影响0人  KeDaiBiaO1

总结一下效率低的递归实现(虽然效率低,但是因为这是一种紧凑的实现还可以用线性规划来优化)
分治递归就不总结了 ,总结一下子问题包含子子问题的那种递归
比较典型的问题有背包问题(《算法:C语言实现 1-4》)和钢条切割问题(《算法导论》

  1. 递归调用的那个方法的返回其实是上一次的结果(我理解的不一定对)
//背包问题  注释掉的是书中的实现  但是我觉得改成①更容易理解  这也是算法导论里面的写法
        for(i = 0, max = 0 ; i < items.length ; i++){
            if((space = cap - items[i].size) > 0){
//              if((t = knap(space) + items[i].val) > max){
//                  max = t;
//                  System.out.println(max);
//              }
                max = max(max, knap(space) + items[i].val);//①
                
            }
        }
//钢条切割
        for (int i=1;i<=n;i++){
            q=max(q,p[i]+cut_rod(p,n-i));
            if (i==n){
                System.out.println("最优解 : "+q);
            }

        }

递归实现是自顶向下的,每次调用会返回上一次的结果 所以max()方法中就是用此时的最大值和 上一次+这一次(背包必须容量够才可以) ,返回两个的较大值

上一篇下一篇

猜你喜欢

热点阅读