斐波纳契计算器返回错误的值

时间:2013-11-25 11:04:25

标签: c# asp.net-mvc-4 fibonacci

快速问题,包含的代码返回斐波纳契值,但它是错误的值,它偏离2,例如用户输入十,返回89,而不是34。 基本上我只想返回用户输入的值的Fibonacci值?

有人能发现问题吗?感谢

var Newmodel = new FibonacciModel();

int a = 0;
int b = 1;
for (int i = 0; i < model.InputFromUser; i++)
{
    model.FibonacciValue = a + b;
    a = b;
    b = model.FibonacciValue;
}

Newmodel.InputFromUser = model.InputFromUser;
Newmodel.FibonacciValue = model.FibonacciValue;

return View(Newmodel);

1 个答案:

答案 0 :(得分:6)

不应计算第一和第二斐波纳契值:

int a = 0;
int b = 1;

switch(model.InputFromUser)
{
   case 0: model.FibonacciValue = a; break;
   case 1: model.FibonacciValue = b; break;
   default:
       for (int i = 2; i < model.InputFromUser; i++)
       {
           model.FibonacciValue = a + b;
           a = b;
           b = model.FibonacciValue;
       }
       break;

}

另外,我建议您将Fibonacci值计算移到单独的方法中:

private int CalculateFibonacciValue(int index)
{
    if (index < 0)
        throw new ArgumentException();

    int a = 0;
    int b = 1;
    int value = 0; 

    if (index == 0)
        return a;

    if (index == 1)
        return b;

    for(int i = 2; i <= index; i++)
    {
        value = a + b;
        a = b;
        b = value;        
    }

    return value;
}

这将使代码更加干净:

model.FibonacciValue = CalculateFibonacciValue(model.InputFromUser);