【发布时间】:2015-10-18 18:40:59
【问题描述】:
我目前正在研究递归,但我一直被这个问题困扰:
使用递归找到通过数组的最便宜的路径。例如,如果我有一个数组 [0,1,3,4,1],我从值 0 开始。现在我有 2 个选项,我可以跳转到索引 2 或只是移动到索引 1。在这种情况下,我会跳转右到索引 2(值 3)然后跳转到索引 4(值 1),因为 3+1= 4,这将是通过数组的最便宜的方式。
我尝试将移动索引值与跳转索引值进行比较,看看哪个是最小的,但在这种情况下,这不起作用,因为如果我将移动值 (1) 与跳转值 (3) 进行比较,则 1 是最小的我的程序会将其视为正确的路径,而实际上并非如此,而 3 是更好的选择。
感谢您抽出宝贵时间提供帮助!
【问题讨论】:
-
解释你“跳”到这些指数的理由。
-
对不起。为此,我们只能跳跃或移动。跳跃 = 前进 2 格,移动 = 前进 1 格。因此,为了找到最便宜的路径,我会跳到值 3,然后跳到值 1。所有其他可能性都更“昂贵”。
-
这仍然没有意义。你应该描述递归在这里扮演的角色,以及你用来跳转的基本原理(它是数组中的值,就像我在想的那样?)。
-
游戏的目标是以最低的总成本从第一列移动到最后一列。您总是从第一列开始游戏并且有两种类型的移动:您可以移动到相邻的列或跳过相邻的列以降落两列。博弈成本是已访问列的成本之和。所以这就是递归解决方案发挥作用的地方。如何决定走哪条路?
-
@Makoto 他的意思是从数组中的某个索引
i可以转到索引i+1或i+2,这样他必须到达数组的末尾。对于他访问的每个索引,他都会添加它的值。目标是找到一条通过数组的路径,总价值最小。