2013-11-25 41 views
1

快速问题,包含的代码返回一个斐波那契数值,但它是错误的值,它是2,例如。用户输入十和89返回,而不是34. 基本上我只想返回由用户输入的值的斐波那契值?斐波纳契计算器返回错误值

任何人都可以发现问题吗?由于

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

为什么分配'Newmodel.FibonacciValue'两次? – haim770

+0

道歉,我会编辑.. – mkell

+0

请参阅http://stackoverflow.com/questions/9122277/what-is-a-non-recursive-solution-for-fibonacci-like-sequence-in-java –

回答

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; 

}

此外,我建议你到斐波那契值计算移动到不同的方法:

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); 
+1

一致的代码缩进将会很好(我准备好了我的+1) – Wolf

+1

这太好了,谢谢lazyderezovsky – mkell

+1

好:)但是...这个投掷留下了一点点;) – Wolf