快速问题,包含的代码返回斐波纳契值,但它是错误的值,它偏离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);
答案 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);