Ошибка "Индекс за пределами диапазона"
Есть задача. В принципе все работает, но выдает ошибку.
Напишите функцию, которая будет возвращать указанный элемент ряда Фибоначчи. Ряд Фибоначчи – это ряд, в котором каждый следующий элемент равен сумме двух предыдущих. 1 1 2 3 5 8 13 21… Функция принимает порядковый номер элемента и возвращает соответствующий элемент.
Может быть, конечно, я что-то не так понял, но написал вот такой код:
public static int FibReturn(List<int>fib)
{
int x = 0, y = 1;
int fib_a=fib[0];
Console.Write("Введите номер позиции в ряду Фиббоначи: ");
int a = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < a; i++) // Добавяем необходимое кол-во элементов в список,
// согласно переменной a
{
fib.Add(fib[x] + fib[y]);
x++;
y++;
fib_a = fib[a-1];
}
return fib_a;
}
static void Main(string[] args)
{
int fibq;
List<int> fib = new List<int>() {0,1}; // создание списка
int fib_a;
fib_a = FibReturn(fib);
Console.WriteLine(fib[0]);
foreach (int item in fib)
Console.Write(item + " ");
Console.Read();
}
Все работает как надо, но ошибка в том, что при вводе значения от 1 до 3-х все работает ок. При вводе 4+ выдает ошибку: "Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции."
Причем если содержимое функции FibReturn() написано в Main(), то все отлично работает.
По идее, цикл for должен прокручиваться "а" раз, но что-то не выходит.
Укажите, пожалуйста, мои ошибки, и желательно с пояснением. Если я все не так, как нужно, в задании написал, сильно не ругайтесь. =))
Заранее спасибо!