Как реализовать вычисление числа Пелла в c #

1

Я пытаюсь вычислить числа Pell, однако я всегда получаю возможность Cannot evaluate expression because the current thread is in a Qaru state. исключение, так как метод называется рекурсивным.

static int calcPell(int input)
{
    int i = 0;
    try
    {
        if (input == 0 || input == 1)
            return input;
        else
            return i = (2 * calcPell(input - 1) + calcPell(input + 1));
    }
    catch(Exception ex)
    {
        Console.Write(ex.Message);
    }
    return i;
}
Теги:

3 ответа

4
Лучший ответ

Согласно http://en.wikipedia.org/wiki/Pell_number, должно ли оно быть

return 2 * calcPell(input - 1) + calcPell(input -2);
  • 0
    Да, вход +1 вызывает бесконечный спад.
  • 0
    Спасибо за ваш вклад!
1

Программа идет в бесконечной рекурсии, как в этой строке

return i = (2 * calcPell(input - 1) + calcPell(input + 1));

вызов функции calcPell(input + 1) будет бесконечным, так как нет верхнего предела, определенного

  • 0
    Спасибо, понял мою ошибку!
1

Ваш алгоритм для расчета номеров Pell неверен и не будет завершен, если предоставленный вход больше 1. Поскольку ваш компьютер имеет ограниченные ресурсы, он заканчивается переполнением стека.

Проблематичной частью является то, что calcPell(int input) вызывает calcPell(input + 1). Вызов calcPell(2) вызовет calcPell(3) который вызовет calcPell(4) и это продолжается бесконечно, потому что только calcPell(0) и calcPell(1) рекурсию.

В статье Википедии о номерах Pell вы можете увидеть правильное отношение повторения:

Изображение 174551

В вашей реализации вы должны исправить второй оператор return:

return 2 * calcPell(input - 1) + calcPell(input - 2);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню