如何传播与递归减少

问题描述 投票:4回答:1

这里是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))

如何使用减少和递归的方式利用扩展语法,我得到了一些错误,并concat函数被调用时我使用reduce通过递归这里是代码无法正常工作,

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));

输出为减小(一个)是[ 10000, 20 ]

javascript arrays loops
1个回答
2
投票

确保降低处理器总是返回数组,眼看处理器期望ar是一个数组。如果undefined在降低处理器返回,这将传递到下一个迭代减少为ar,这是你得到了错误的原因。

另外,确保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));
© www.soinside.com 2019 - 2024. All rights reserved.