Javascript 帮助 w/exercise

Javascript help w/exercise

因此,我坚持使用这段代码数小时。

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

我这里理解的amount是46,coins是25,10,5,2,1,所以后面这个,amount大于等于coins,下一块是:

left = (amount - coins[0]); 

基本上是25(零索引),next;

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

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

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

您在此处处理的术语是 recursion - 函数在其主体内调用自身时出现的现象。您在两个地方(第 6 行和第 9 行)内部调用 amountTocoins 函数。

在你的行中:

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

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

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

在您执行 amountTocoins(21, [25, 10, 5, 1, 2]) 之前,您的 [25].concat(..) 函数不会被执行。

你会越来越深入,直到你到达停止这个嵌套函数调用(递归)的底线条件。在您的情况下,条件是 amount === 0,它将 return 您的第一个值与空数组 [].

连接

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