2009-12-24 64 views
0

我有這個類:斐波那契類總是返回0

public class Fibonacci 
{ 
    public static int Calculate(int x) 
    { 
     if (x <= 0) 
     { 
      return 0; 
     } 
     else 
     { 
      return Calculate(x - 1) + Calculate(x - 2); 
     } 
    } 
} 

每一個教程中,我做的,如果一個輸入6一個應該得到8預期的結果,但是當我運行它,它總是返回0它是遞歸的,所以對我來說是有意義的,但他們如何得到8作爲預期的結果?

+9

你應該自己解決,你會學到更多。提示:請考慮計算(0)的作用和計算(1)的作用。如果你沒有得到它,請使用調試器。 – 2009-12-24 11:17:00

+0

Calculate方法不可能返回null - 返回類型是一個整數,它不能爲空。我注意到,在文中你說它返回零 - 但在標題你說空。這些不是一回事 - 我建議你將標題更新爲零。 – 2009-12-24 11:18:16

+0

作爲旁註:遞歸不是計算斐波那契數的最佳方法。例如,當你用這種方法計算f(n)時,則f(n-2)被計算兩次。 F(n-4)計算5次!用f(6)試試看...... – 2009-12-24 12:25:01

回答

2

斐波那契數列有2個停止點,它們都是1(1,1,2,3,5,...)。這工作:

using System; 
using System.Collections.Generic; 

public class Fibonacci 
{ 
    public static int Calculate(int x) 
    { 
     if (x <= 1) 
      return 1; 
     else 
      return Calculate(x - 1) + Calculate(x - 2); 
    } 

    public static void Main() 
    { 
    Console.WriteLine(Calculate(4)); 
    } 
} 
+0

當輸入是6時,這仍然不會產生8 ... – 2009-12-24 11:30:58

+0

它是基於0的,所以如果你給它5,它會返回8。 – Blindy 2009-12-24 11:48:40

4

您退出條件錯誤。仔細閱讀您的代碼,並對輸入1和2進行思考。

1

教程錯誤或者您錯誤地複製了代碼。你是正確的,它以上將永遠返回0.檢查你的基本情況。

0

Abductio歸謬法 - 計算(X)從來沒有真正返回一個非零數字。 8是第六個Fib編號,但您從不會從此函數創建非零值。正如@布林迪指出的,你需要一個更廣泛和包容性的基礎案例。

6

什麼是0 + 0 + 0 + 0 + 0 + 0 + ... + 0?

有你的答案。