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

mke*_*ell 1 c# fibonacci asp.net-mvc-4

快速问题,包含的代码返回一个Fibonacci值,但它是错误的值,它关闭2,例如用户输入10,返回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);
Run Code Online (Sandbox Code Playgroud)

Ser*_*kiy 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;
Run Code Online (Sandbox Code Playgroud)

}

另外我建议你将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;
}
Run Code Online (Sandbox Code Playgroud)

这将使代码更干净:

model.FibonacciValue = CalculateFibonacciValue(model.InputFromUser);
Run Code Online (Sandbox Code Playgroud)