2009-08-31 6 views
1

フィボナッチシリーズのコードをVBで記述しようとしていますが、私のシリーズのいくつかの値が正しくありません。誰かがコードを教えてくれますか?VBでフィボナッチシリーズを開発する

以下は私が今までに持っているものです。

Private Function FibNumber(number As Integer) As Integer 

    If (number > 2) Then 
     FibNumber = (FibNumber(number - 2) + FibNumber(number - 1)) 
    Else 
     FibNumber = 1 
    End If 

    End Function 

    Private Sub command1_click() 
    Dim x As Integer 
    x = Text1.Text 
    Call FibNumber(number) 

End Sub 
+0

ショーにMAXNを増やす必要があります。> – IProblemFactory

+0

は、あなたがこれまでにあなたの試みのコード例を提供することができますか? – waqasahmed

+0

compgeek:どういうわけではないコードサンプルであなたの投稿を編集してください。あなたがコードを共有するなら、あなたは間違いなくより多くの助けと素晴らしい答えを得るでしょう。 –

答えて

3

まあ、私はクイック検索を行なったし、私は結果の最初のカップルで、次のを思い付いた:

Private Function FibNumber(number As Integer) As Integer 

If (number > 2) Then 
    FibNumber = (FibNumber(number - 2) + FibNumber(number - 1)) 
Else 
    FibNumber = 1 
End If 

End Function 
+0

でも、print..iという関数を呼び出す必要があります。 – compgeek

+0

@compgeek正解ですが、フィボナッチシリーズをどのように使う予定か、私はそれをどのように計算するかを想定していませんでした。 – Joseph

+0

@joseph:次にコードを完成させてください。 – compgeek

1

私はこの方法で古いですけど、私が問題にして可能性を考えますcompgeekがどのように関数を呼び出すのか。

の代わりに:

Call FibNumber(number) 

それは次のようになります。

Call FibNumber(x) 
+0

+1:これは良い点です。元のものと他の回答の間違いです。 –

1

私のソリューション:

Private Function FibNumber(number As Integer) As Integer 
    If (number > 2) Then 
     FibNumber = (FibNumber(number - 2) + FibNumber(number - 1)) 
    Else 
     FibNumber = 1 
    End If 
End Function 

Private Sub command1_click() 
    Dim x As Integer 
    x = Text1.Text 
    Call FibNumber(number) 
End Sub 
0

これは、Javaの機能だし、私を信じて。フィボナッチは、この特定のバージョン よりもはるかに高速または複雑になることはありません。それは元の再帰的なものより約100倍速く動作するように最適化されています。

ヒント:パラメータの長さを拡張するには、maxNを変更する必要があります。たとえば あなたは0と199の間で入力番号にしたい場合は、あなたがやっていること200

static final int maxN = 72; 
static long knownF[] = new long[maxN]; 

static long F(int i) { 
    if (knownF[i] != 0) { 
    return knownF[i]; 
    } 

    long t = i; 

    if (i < 0) { 
     return 0; 
    } 

    if (i > 1) { 
     t = F(i - 1) + F(i - 2); 
    } 

    return knownF[i] = t; 
}