javascript改变算法
Posted
技术标签:
【中文标题】javascript改变算法【英文标题】:javascript making change algorithm 【发布时间】:2017-03-19 06:21:33 【问题描述】:我正在用javascript解决这个问题“改变”:
问题:
给定金额,一组硬币面额,计算 用可用硬币赚钱的方法数量 教派。
例子:
对于金额=4 (4¢) 和面额=[1,2,3] (1¢, 2¢ 和 3¢),你的程序会输出 4——制作方法的数量 4¢ 与这些面额:
1美分,1美分,1美分,1美分
1美分,1美分,2美分
1美分,3美分
2美分,2美分
我找到了解决办法:
var makeChange = function(total)
var count = 0;
var coins = [1, 2, 5, 10, 20, 50, 100, 200];
var changer = function(index, value)
var currentCoin = coins[index];
if( index === 0)
if( value % currentCoin === 0)
count++;
return;
while( value >= 0 )
changer(index-1, value);
value -= currentCoin;
changer(coins.length-1, total);
return count;
;
makeChange(200);
问题:
-
有人可以向我解释发生了什么吗?我尝试按照代码进行操作,但在递归之间迷失了方向。
我知道他正在计算最终的硬币价值,并从给定的总数中减去。 (但为什么?)我有点迷路了。
-
当 while 循环中 value >= 0 时,它不断循环增加索引,我不明白为什么。
有人能理解这个算法吗?
抱歉,刚开始学习动态编程。
谢谢,
【问题讨论】:
"and denominations=[1,2,3][1,2,3] (11¢, 22¢ and 33¢)" - 我被困在理解那部分。如果允许的面额是 11、22 和 33,为什么要表示为 [1,2,3][1,2,3]?那应该是两个数组,还是一个二维数组,还是? @nnnnnn 谢谢。对不起,我很抱歉,这是一个错字。 (复制粘贴错误)。更新了问题。 【参考方案1】:让我们跟踪makeChange(4)
发生了什么:
函数changer
被定义然后第一次被调用。
value = 4, index = 7, coins[7] = 200
由于变量 index
不为 0,我们继续进行 while
循环。
第二次调用changer
时使用index
6
Meanwhile, the first call continues the 'while'
loop but since 200 has been subtracted from 'value',
'value' is now less than 0 so the 'while' loop terminates
and this first call does nothing more.
(Keep in mind that the variable 'value' is distinct
and private to each call, so the 'while' loop only
affects the 'value' in its own function call.)
好的,现在这种模式继续,所有函数调用都有index
指向大于value
的硬币,直到index
为1。
value = 4, index = 1, coins[1] = 2
这一次更多的发生在while
循环中:
We get the function call, 'changer(0,4)',
AND a second function call, 'changer(0,2)',
after we subtract 2 from 'value', which was 4,
AND a third function call, 'changer(0,0)',
after we subtract 2 from 'value', which was 2.
These 3 calls respectively represent:
1 + 1 + 1 + 1
2 + 1 + 1
2 + 2
Each time the line 'value -= currentCoin' is executed,
it represents the start of another set of choices for
solutions that include that coin.
4 % coins[0] = 0, meaning 4 is divisible by 1 represents 1 + 1 + 1 + 1
4 - 2 folllowed by 2 % 1 represents 2 + 1 + 1
and 4 - 2 - 2 represents 2 + 2
总计count
:3
【讨论】:
以上是关于javascript改变算法的主要内容,如果未能解决你的问题,请参考以下文章