Я собрал функцию для поиска комбинаций с использованием рекурсии, не превышая встроенный лимит в python.Например, вы можете рассчитать: выберите (1000, 500).Вот как это выглядит сейчас:
def choose(n, k):
if not k:
return 1 .
elif n < k:
return 0
else:
return ((n + 1 - k) / k) * choose(n, k - 1)
Это работает именно так, как я хочу, чтобы это работало.Если k равно 0, верните 1, а если n меньше, чем k, то верните 0 (это в соответствии с математическими определениями, которые я нашел в википедии).Тем не менее, проблема в том, что я не совсем понимаю последнюю строку (нашел ее во время просмотра веб-страниц).Перед последней строкой, которую я сейчас использую, это была последняя строка, которую я имел в функции:
return choose(n-1,k-1) + choose(n-1, k)
, которую я также нашел в википедии (хотя я не думаю, что я понимаю эту100% также).Но это всегда приводит к ошибке из-за встроенного ограничения в python, тогда как новая строка, которую я использую, не приводит к такой ошибке.Я понимаю, что новая строка работает намного эффективнее с программой, потому что мы, например, не разбиваем ее на две подзадачи.
Итак, еще раз ... я спрашиваю, есть ли какие-нибудь добрые души, которые могли бы объяснить (понятным образом), как эта строка кода работает в функции:
return ((n + 1 - k) / k) * choose(n, k - 1)