Расчет каталонских чисел

Я пытаюсь использовать этот код для вычисления каталонского числа в Python, но он просто не работает. Как я могу это исправить?

Вот код, который у меня есть:

def catalan_rec(n):
    if n == 0:
        return 1
    else:
        b = 0
        for i in range (n):
            b += sum((catalan_rec(i))*(catalan_rec(n-1-i)))
    return b

3 ответа

Проблема в том, что вы суммируете, вы должны умножать. Из Википедии определение таково:

формула каталонского числа

Вы можете лучше использовать цикл for вместо рекурсии:

def catnumber(n):
  ans = 1.0
  for k in range(2,n+1):
     ans = ans *(n+k)/k
  return ans

Редактировать 2

Я думал, что формула была неправильной, но проблема была в том, что в ней использовалось целочисленное деление и, следовательно, округленные промежуточные результаты. Решение состоит в том, чтобы использовать переменную с плавающей точкой, я делаю это путем инициализации с ans=1.0,

Измените строку:

b += sum((catalan_rec(i))*(catalan_rec(n-1-i)))

За:

b += (catalan_rec(i))*(catalan_rec(n-1-i))

Вы передаете целое число в качестве аргумента функции sum(), который принимает только итеративный.

Кажется, это работает для меня (из вашего кода)

def catalan_rec(n):
    b = 0
    if n == 0:
        return 1
    else:
        for i in range (n):
            b += (catalan_rec(i))*(catalan_rec(n-1-i))
    return b

print catalan_rec(5)

Из:

42
Другие вопросы по тегам