Suche…


N-te Fibonacci-Zahl berechnen

Visual Basic.NET, wie die meisten Sprachen erlaubt Rekursion, ein Verfahren , mit dem eine Funktion selbst unter bestimmten Bedingungen fordert.

Hier ist eine grundlegende Funktion in Visual Basic .NET zum Berechnen von Fibonacci- Zahlen.

''' <summary>
''' Gets the n'th Fibonacci number
''' </summary>
''' <param name="n">The 1-indexed ordinal number of the Fibonacci sequence that you wish to receive. Precondition: Must be greater than or equal to 1.</param>
''' <returns>The nth Fibonacci number. Throws an exception if a precondition is violated.</returns>
Public Shared Function Fibonacci(ByVal n as Integer) as Integer
    If n<1
        Throw New ArgumentOutOfRangeException("n must be greater than or equal to one.")
    End If
    If (n=1) or (n=2)
        ''Base case. The first two Fibonacci numbers (n=1 and n=2) are both 1, by definition.
        Return 1
    End If
    ''Recursive case.
    ''Get the two previous Fibonacci numbers via recursion, add them together, and return the result.
    Return Fibonacci(n-1) + Fibonacci(n-2)
End Function

Diese Funktion überprüft zunächst, ob die Funktion mit dem Parameter n gleich 1 oder 2 aufgerufen wurde. Definitionsgemäß sind die ersten beiden Werte in der Fibonacci-Sequenz 1 und 1, daher sind keine weiteren Berechnungen erforderlich, um dies zu bestimmen. Wenn n größer als 2 ist, können wir den zugehörigen Wert nicht so leicht nachschlagen. Wir wissen jedoch, dass eine solche Fibonacci-Zahl gleich der Summe der vorherigen beiden Zahlen ist. Daher fordern wir diese über Rekursion (Aufruf unserer eigenen Fibonacci-Funktion) an. Da aufeinanderfolgende rekursive Aufrufe mit immer kleineren Zahlen über Verringerungen von -1 und -2 aufgerufen, wissen wir , dass irgendwann werden sie Zahlen erreichen , die als 2. Sobald diese Bedingungen kleiner sind ( so genannte Basis Fälle) erreicht werden, wickelt sich der Stapel und wir Holen Sie sich unser Endergebnis.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow