4 votes

comment s'étendre avec la réduction par récursion

Voici la méthode de la boucle for et le résultat que je veux est le même que pour le code ci-dessous aussi

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

comment utiliser la réduction et la syntaxe de l'étalement en récursion, j'ai eu une erreur et la fonction concat est appelée pas fonction quand j'ai utilisé reduce par récurrence voici le code ,

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

la sortie pour le reduce(one) est [ 10000, 20 ]

2voto

Dacre Denny Points 17294

Assurez-vous que le gestionnaire de réduction renvoie toujours le tableau, vu que le gestionnaire attend ar pour être un tableau. Si undefined est retourné dans le gestionnaire de réduction, il sera transmis à la prochaine itération de réduction en tant que ar qui est à l'origine de l'erreur que vous obtenez.

En outre, assurez-vous que c est définie avant de la renvoyer, ou réviser le code comme indiqué ci-dessous pour éviter la nécessité de l'option c complètement :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X