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

Einführung in die Verwendung rekursiver Funktionen in js

黄舟
黄舟Original
2016-12-12 14:41:121243Durchsuche

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>

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

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.

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

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); 
} 
}
Verwenden Sie dann die oben genannten 4 Zeilen Testcode. die letzte Zeile Der Testcode kann auch 24 erfolgreich ausgeben.

Stellungnahme:
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