2009-08-31 5 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

그것은 자바 기능, 그리고 날 믿어; 피보나치는 이 특정 버전보다 훨씬 더 빠르고 복잡합니다. 원래의 재귀 적 방법보다 약 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; 
}