Heim > Web-Frontend > js-Tutorial > Einführung in die Verwendung rekursiver Funktionen in js

Einführung in die Verwendung rekursiver Funktionen in js

黄舟
Freigeben: 2016-12-12 14:41:12
Original
1261 Leute haben es durchsucht

Versuchen wir es mit einer Fakultät innerhalb von 10:

 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>js中递归函数的使用</title> 
<script type="text/javascript"> 
function f(num){ 
if(num<1){ 
return 1; 
}else{ 
return f(num-1)*num; 
} 
} 
</script> 
</head> 
<body> 
<script type="text/javascript"> 
alert("10!的结果为:"+f(10)); 
</script> 
</body> 
</html>
Nach dem Login kopieren

Das ist alles für den Aufruf rekursiver Funktionen

Die Versicherungsmethode, wenn sich rekursive js-Funktionen selbst aufrufen.
Aus der erweiterten js-Programmierung
Eine typische faktorielle rekursive Funktion:

function fact(num){ 
if (num<=1){ 
return 1; 
}else{ 
return num*fact(num-1); 
} 
}
Nach dem Login kopieren

Der folgende Code kann einen Fehler verursachen:
var anotherFact = fact
fact = null ;
alert(antherFact(4)); //Fehler

Da fact keine Funktion mehr ist, ist ein Fehler aufgetreten.
Das Problem kann mit arguments.callee gelöst werden, das ein Zeiger auf die ausgeführte Funktion ist.
Die neue Funktion ist:

function fact(num){ 
if (num<=1){ 
return 1; 
}else{ 
return num*arguments.callee(num-1); //此处更改了。 
} 
} 
var anotherFact = fact; 
fact = null; 
alert(antherFact(4)); //结果为24.
Nach dem Login kopieren

Verbesserungen der gewöhnlichen JS-Rekursion

Rekursive Funktionen werden gebildet, wenn eine Funktion sich selbst über ihren Namen aufruft, wie unten gezeigt:

function factorial(num) 
{ 
if(num<=1) 
{ 
return 1; 
} 
else 
{ 
return num * factorial(num-1); 
} 
}
Nach dem Login kopieren

Dies ist eine klassische Fakultätsfunktion. Oberflächlich betrachtet scheint es kein Problem zu geben, aber der folgende Code kann dazu führen, dass es schief geht.
var anotherFactory = Faculty;

anotherFactorial(4); //output 24
factorial = null; (4); //TypeError: Die Eigenschaft „Fakultät“ des Objekts [Objektfenster] ist kein Testen Sie unter Funktion chrome
Der Grund dafür ist, dass der von uns definierte Funktionsname tatsächlich ein Zeiger auf die Funktion ist und zu diesem Zeitpunkt ein andererFactorial definiert ist Es zeigt auch auf diese Funktion, sodass der Aufruf von anotherFactory (4) erfolgreich 24 ausgeben kann
Zu diesem Zeitpunkt factial = null; Dann ist der Verweis auf die Ausführungsdefinitionsfunktion anotherFactorial, und die obige Fehlermeldung wird beim Aufruf von anotherFactorial(4) angezeigt.
Zu diesem Zeitpunkt können Sie arguments.callee verwenden, um die Funktion in der Funktionsdefinition zu ersetzen.
Die Definition der Funktion lautet:

function factorial(num) 
{ 
if(num<=1) 
{ 
return 1; 
} 
else 
{ 
return num * arguments.callee(num-1); 
} 
}
Nach dem Login kopieren
Verwenden Sie dann die oben genannten 4 Zeilen Testcode. die letzte Zeile Der Testcode kann auch 24 erfolgreich ausgeben.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage