Ihr Code hat einen kleinen Fehler, der dazu führt, dass die Funktion unendlich aufgerufen wird.
Als Basisfall, statt Test n < 2
, versuchen n<=1
, wie folgt aus:
function fib(n){
if(n <= 1)
{
return 1;
}
else
{
return fib(n-1) + fib(n-2);
}
}
Ansonsten geht es weiter fib()
anrufen, ohne jemals den Basisfall auslösende!
Hoffe es hilft!
EDIT
In Ordnung! Nachdem Sie Ihren Code bearbeitet sehe ich einen weiteren großen Fehler, den Sie hier haben ...
var n = parseInt(document.getElementById("Input").value)
Ruft den Eingabewert jedes Malfib()
genannt wird. Dies bedeutet, dass Sie niemals zulassen, dass der Basisfall jemals aufgerufen wird! Stattdessen wird fib()
aufgerufen und n wird jedesmal auf den ursprünglichen Wert initialisiert.
Stattdessen versuchen so etwas wie:
var n = parseInt(document.getElementById("Input").value);
function fib(n){
if(n <= 1)
{
return 1;
}
else
{
return fib(n-1) + fib(n-2);
}
}
document.write(fib(n));
EDIT 2
Try this:
<script language='javascript'>
function runfib() {
var input = document.getElementById("Input").value;
var n = parseInt(input);
document.getElementById("demo").innerHTML = fib(n);
}
function fib(n){
if(n <= 1)
{
return 1;
}
else
{
return fib(n-2) + fib(n-1);
}
}
</script>
<body>
<input type="text" id="Input">
<button onclick= "runfib()">Get My Fib #!</button>
<p id="demo"></p>
</body>
Es verwendet eine Hilfsfunktion runfib()
genannt. Sie haben versucht, unter anderen Fehlern fib()
ohne Parameter aufzurufen.
Dieser Code wurde getestet und funktioniert. (Hier ist ein Fiddle)
Übergeben Sie den Wert der Eingabe * als Argument *, nicht innerhalb der Funktion ... – Li357
Nach Ihrer Bearbeitung macht Ihre Funktion weniger Sinn als zuvor. Bitte posten Sie den ** echten ** Code, der Probleme verursacht. Wenn das Update wirklich korrekt ist, besteht das Problem darin, dass die Funktion keinen Parameter hat und den Startwert von "n" bei jedem Aufruf von der Benutzereingabe neu lädt. – Pointy
Entschuldigung, ich habe meine Codierung bearbeitet, während ich diese Frage gestellt habe, werde ich die neueste posten. –