《数据结构》递归.ppt

《数据结构》递归.ppt

不断重复以上过程,直到以下三种情况出现: (1)如果当前需要选择的物品重量总和为0,说明搜索已经成功,算法结束; (2)如果当前需要选择的物品重量总和已经小于w1,说明搜索失败,算法结束; (3)若当前被考虑的选择物品对象为w0(w0不存在),说明搜索失败,算法结束。 简单背包问题的递归实现过程见算法5.9。 下面考虑简单背包问题非递归算法的实现。仍然假设物品的重量按从小到大的顺序存放于数组w中,并且选择物品时总是优先考虑重量大的物品。 由于简单背包问题的求解明显带有试探性,因此该问题属于复杂递归问题,在实现过程中必须借助于堆栈来记录回溯点。于是我们定义一个栈stack,每当试着选择一件物品,就设置一个回溯点,将它的重量和编号压入栈中;而一旦发现它被选择的可能性不存在,则将它出栈,同时通过其编号取它前面的一个物品作为当前考虑的对象;如果求解过程中遇到无法再求解下去需要回溯的情形,但此时栈已为空,则说明该背包问题无解,算法的执行以失败而告终;若被选择物品的重量总和恰巧与s的值相等,则求解成功,算法结束。简单背包问题的非递归实现过程见算法5.10。 例9 设计一个递归函数,将一个正整数n转换成字符串。例如,若n=456,则函数输出的结果为“456”。n的位数不确定,可以为任意位数的整数。 void convert(int n) { in

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档