2009-12-24 71 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?

有你的答案。