【问题标题】:Fibonacci calculator returning the wrong value斐波那契计算器返回错误值
【发布时间】:2013-11-25 20:03:59
【问题描述】:

快速问题,包含的代码正在返回一个斐波那契值,但它是错误的值,它偏离了 2,例如用户输入 10 并返回 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);

【问题讨论】:

  • 为什么分配Newmodel.FibonacciValue两次?
  • 抱歉,我会编辑它..
  • 斐波那契序列有两个种子值,分别为 n=0 和 n=2。
  • @AdamKewley 差一个?

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


【解决方案1】:

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

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

【讨论】:

  • 很好 :) 但是......投掷有点左;)
  • 嗯,for(int i == 2; i &lt; index; i++) 是什么意思?
  • @MrLister 是的肯定只是一个错字,但没有rep
猜你喜欢
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 2010-11-07
  • 2020-01-18
  • 1970-01-01
  • 2017-11-18
  • 2017-07-22
  • 1970-01-01
相关资源
最近更新 更多