Ich möchte eine Funktion (Persistenz) schreiben, die einen positiven Parameter num aufnimmt und ihre multiplikative Persistenz zurückgibt. Dies ist die Anzahl der Male, die Sie die Ziffern in num multiplizieren müssen, bis Sie eine einzelne Ziffer erreichen. Zum Beispiel:Worauf kehrt sich eine rekursive Schließung zurück?
persistence(39) === 3 // because 3*9 = 27, 2*7 = 14, 1*4=4
// and 4 has only one digit
persistence(999) === 4 // because 9*9*9 = 729, 7*2*9 = 126,
// 1*2*6 = 12, and finally 1*2 = 2
persistence(4) === 0 // because 4 is already a one-digit number
ich dies schrieb:
function persistence(num) {
//code me
var f;
f= countPersistence(num);
var toReturn= f(num); console.log("received value: "+toReturn);
return toReturn;
}
function countPersistence(num){
var count=0;
return function g(num){
var numt=num+"";
numt=numt.split("");
if(numt.length>1){
count++;
for(var i=0; i<numt.length-1; i++){
numt[i+1]=numt[i]*numt[i+1];
}
arguments.callee(numt[numt.length-1]);
}
else
{ console.log("returned value: "+count); return count;}
}
}
Wie Sie diesen Code ausgeführt wird sehen können, der zurückgegebene Wert der inneren Funktion nicht genau das, was erwartet wird. Tatsächlich sollte eine Funktion dorthin zurückkehren, wo sie aufgerufen wird, richtig? Aber in diesem Fall, da es rekursiv ist, wird es von sich selbst aufgerufen. Ich habe keine Ahnung, wie der tatsächliche Wert abgerufen werden (ohne globale Variable)
FYI: arguments.callee veraltet .... – epascarello