Javascript帮助w / exercise

时间:2018-03-11 23:04:24

标签: javascript arrays function concat

所以,我坚持使用这段代码几个小时。

function amountTocoins(amount, coins) {
    if (amount === 0) { 
        return []; 
    } else {
        if (amount >= coins[0]) { 
            left = (amount - coins[0]); 
            return [coins[0]].concat( amountTocoins(left, coins)); 
    } else {
            coins.shift();
            return amountToCoins(amount, coins);
       }
    }
 }
 document.write(amountTocoins(46, [25, 10, 5, 2, 1])); /25, 10, 10, 1

据我所知,这里的金额是46,而硬币是25,10,5,2,1,所以紧随其后,金额大于或等于硬币,下一篇:

left = (amount - coins[0]); 

基本上是25(零索引),下一个;

return [coins[0]].concat( amountTocoins(left, coins));

concat()方法用于合并两个或多个数组,但是如何在这个特定的代码中合并?输出为:25,10,10,1,我在上面的代码中也给出了评论。

我希望我能很好地描述我的问题

1 个答案:

答案 0 :(得分:0)

你在这里处理的术语是recursion - 一个函数在它的体内调用自身的现象。你在两个地方(第6和第9行)调用你自己的amountTocoins函数。

在你的行中:

return [coins[0]].concat( amountTocoins(left, coins));

暂停连接,直到执行对amountTocoins函数的新调用并返回值。在您的示例中,您的行被解释为:

return [25].concat(amountTocoins(21, [25, 10, 5, 2, 1]))

在执行amountTocoins(21, [25, 10, 5, 1, 2])之前,您的[25].concat(..)功能未执行。

你会越走越深,直到你达到停止这个嵌套函数调用(递归)的底线条件。在您的情况下,条件为amount === 0,它将返回将与其连接的第一个值,即空数组[]

注意:您在上一次amountTocoins函数调用中遇到错字(第9行)。