gpt4 book ai didi

javascript - 如何通过递归减少传播

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:09:03 25 4
gpt4 key购买 nike

这是 for 循环方法,我想要的结果与下面这段代码的结果相同

function reduce (dollars) {
let arr = [];
let change = [10000,5000,2000,1000,500,200,100,50,20,10,1];

if(dollars === 0) return arr
for(key of change){
if(key <= dollars) return arr.concat(key).concat(reduce (dollars -= key));
}
}

console.log(reduce(900))
console.log(reduce(9000))

如何以递归方式使用reduce和spread语法,当我递归地使用 reduce 时,我得到了一些错误并且调用了 concat 函数而不是函数这是代码,

function reduce(dollar) {
let change = [10000,5000,2000,1000,500,200,100,50,20,10,1];
if(dollar === 0) return c
let c = change.reduce((ar, el) => {
if(dollar >= el) {
return ar.concat(el).concat(reduce(dollar-=el))
}
}, [])
}
let [ one, two, three] = [10020,9000,900];
console.log(reduce(one));
console.log(reduce(two));
console.log(reduce(three));

reduce(one) 的输出是 [ 10000, 20 ]

最佳答案

确保 reduce 处理程序始终返回数组,因为处理程序期望 ar 是一个数组。如果在 reduce 处理程序中返回 undefined,它将作为 ar 传递到下一个 reduce 迭代,这就是您遇到的错误的原因。

此外,确保 c 在返回之前已定义,或者如下所示修改代码以避免完全需要 c:

function reduce(dollar) {

let change = [10000,5000,2000,1000,500,200,100,50,20,10,1];

/* if dollar === 0 then return [] */
if (dollar === 0) return [];

/* Return reduced result (ie "c" in original code) */
return change.reduce((ar, el) => {

/*
While el deducted from dollar yields positive value,
*/
while (dollar - el >= 0) {

/*
then decrement dollar amout by current el and,
*/
dollar -= el;

/*
add el to current result
*/
ar = ar.concat(el)
}

/*
Return resulting ar array
*/
return ar;

}, [])
}

let [ one, two, three ] = [ 10020, 9000, 900 ];
console.log(reduce(one));
console.log(reduce(two));
console.log(reduce(three));

关于javascript - 如何通过递归减少传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54526201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com