以下背包背包递归定义有什么问题?我同意它写得有些古怪(更好的版本会拆分val和权重,并在递归调用上带有索引),但是我仍然想知道为什么这个版本不起作用。我开始了一个小时,但无济于事。
C:\pentaho8.0\data-integration\kitchen /file:"C:\Users\nbessmer\Source\Professional_Services_New\Client Implementations\BlackBaud\Rapid7CodeDrop2\NexposeLoadStripped.kjb"
"-param:HelperFiles=C:\Users\nbessmer\Source\Professional_Services\Rapid7\Output" "-param:InputDirectory=C:\Users\nbessmer\Source
\Professional_Services\Rapid7" "-param:OutputDirectory=C:\Users\nbessmer\Source\Professional_Services\Rapid7\Output\Nexpose" "-param:ReportFile=report.csv" "-param:Root=C:\Users\nbessmer\Source\Professional_Services\Rapid7"
运行:
C:\pentaho8.0\data-integration\kitchen
/file:"C:\Users\NBessmer\Source\Professional_Services_New\Client
Implementations\MIS\Spoon\IP Phones\IP_Phones.kjb"
"-param:InputDirectory=C:/Users/NBessmer/Source/Professional_Services_New/Client Implementations/MIS/Spoon/IP Phones"
"-param:InputFile=C:/Users/NBessmer/Source/Professional_Services_New/Client Implementations/MIS/Spoon/IP Phones/IPT Devices-(Nov-29-2018).xlsx
"-param:MashupDirectory=C:/Users/NBessmer/Source/Professional_Services_New/Client Implementations/MIS/Spoon/IP Phones/mashup"
"-param:OutputDirectory=C:/Users/NBessmer/Source/Professional_Services_New/Client Implementations/MIS/Spoon/IP Phones/output"
给我9,尽管12是更好的解决方案。
答案 0 :(得分:1)
问题在于调用#shift
修改了 same 数组,从而删除了一个项目。
要调试此功能,请尝试为每次items
的调用打印k
一种解决方案是替换:
current_item = items.shift
使用
current_item, *remaining_items = items
,然后将所有递归调用更新为使用remaining_items
。
作为一个示例,它可能更清楚地说明了突变导致错误结果的原因,请考虑第一个调用:
项目[5,10]
将适合背包,因此我们评估right
。每次递归调用都会使items
发生变异并删除一个条目。在您进入堆栈以评估任何left
时,items
数组为空。