la racine numérique est la somme récursive de tous les chiffres d'un nombre. p> donné n, prenez la somme des chiffres de n. Si cette valeur a plus d'un chiffre, continuez à réduire de cette manière qu'un nombre à un chiffre est produit. Ceci est uniquement applicable aux nombres naturels. P> mon code strong> p> p> function digital_root(n) {
let a = n.toString();
let ai = a.split('');
let bi = ai.map((item)=>{
return parseInt(item);
})
let newArr = [];
for(let i = 0; i < bi.length; i++){
let c = bi[i];
newArr.push(c);
}
let d = newArr.reduce((total, item)=>{
return total + item;
}, 0);
function recursive(d){
if(d < 10){
return d
}
a = d.toString();
ai = a.split('');
bi = ai.map((item)=>{
return parseInt(item);
});
newArr = [];
for(let i = 0; i < bi.length; i++){
let c = bi[i];
newArr.push(c);
}
d = newArr.reduce((total, item)=>{
return total + item;
}, 0);
return recursive(d);
}
return d;
}
console.log(digital_root(123));
console.log(digital_root(111));
console.log(digital_root(51024));
3 Réponses :
Vous n'appelerez jamais la fonction récursive que vous avez faite, remplacez Comment je ferais cela: P> retour d code> sur
retour récursif (d); code>
function digital_root(n){
return n < 10 ? n : digital_root(String(n).split('').reduce((acc,val) => acc+(val|0),0));
}
Merci! Je suis surpris que cela ait fonctionné (car je crois comprendre la fonction récursive se trouve dans la fonction "digital_root". Par conséquent, lorsque la fonction récursive renvoie, je ne m'attendais pas à la fonction "digital_root" pour renvoyer le résultat de la fonction de récursive interne. Pourquoi ce travail ? :)
@Andrewneedshelp: Cela renvoie n code> (si n <10) ou les résultats de cet appel récursif vers
digital_root code> (si N> = 10). Il est similaire à
retour n% 2 == 0? "Même": "impair" code>. L'expression conditionnelle
cond? RES: ALT CODE> Rendements
res code> ou
alt code>. À la fin, la déclaration code> renvoie code> renvoie simplement le résultat de cette expression conditionnelle.
En plus de ce que photon a dit, voici une solution plus simple
JavaScript n'a pas de division entière, vous devez donc utiliser math.floor (n / 10) code> à la place. En outre,
somme (x + somme (y)) === somme (x + y) code>, la dernière ligne doit donc être
Somme de retour (n% 10 + math.floor (N / 10)) code>
Mettons dans certains commentaires pour voir ce qui se passe.
p>
function digital_root(n) { // convert multiple digit number to String let a = n.toString(); // split the String into an array of single digit Strings let ai = a.split(''); // convert String array into int array let bi = ai.map((item)=>{ return parseInt(item); }) // it looks like you are just copying the array here, //I don't think there is a need for that // let newArr = []; // for(let i = 0; i < bi.length; i++){ // let c = bi[i]; // newArr.push(c); // } // reduce the int array to the sum of its digits let d = bi.reduce((total, item)=>{ return total + item; }, 0); // That should be it, now just print it or recurse it if (d < 10) { return d; } // here is how you recurse, call the method from within the method return digital_root(d); // I'm not sure what you are doing here, you are repeating code // this is not how recursion works // function recursive(d){ // if(d < 10){ // return d // } // a = d.toString(); // ai = a.split(''); // bi = ai.map((item)=>{ // return parseInt(item); // }); // newArr = []; // for(let i = 0; i < bi.length; i++){ // let c = bi[i]; // newArr.push(c); // } // d = newArr.reduce((total, item)=>{ // return total + item; // }, 0); // return recursive(d); // } // return d; } console.log(digital_root(123)); console.log(digital_root(111)); console.log(digital_root(51024));
Vraiment utile, haha a réalisé comment la corbeille mon code était: «D dans le bon sens!