Как исправить RecursionError: maximum recursion depth exceeded in comparison

Рейтинг: 1Ответов: 2Опубликовано: 18.06.2023
def f(n):
    if n==1: return n
    if n>1:return  n*f(n-1)
print (f(2023)/f(2020))

питон выдает это:

Traceback (most recent call last):
  File "C:\Users\Zver\Desktop\Егэ инф\162.py", line 4, in <module>
    print (f(2023)/f(2020))
  File "C:\Users\Zver\Desktop\Егэ инф\162.py", line 3, in f
    if n>1:return  n*f(n-1)
  File "C:\Users\Zver\Desktop\Егэ инф\162.py", line 3, in f
    if n>1:return  n*f(n-1)
  File "C:\Users\Zver\Desktop\Егэ инф\162.py", line 3, in f
    if n>1:return  n*f(n-1)
  [Previous line repeated 1021 more times]
  File "C:\Users\Zver\Desktop\Егэ инф\162.py", line 2, in f
    if n==1: return n
RecursionError: maximum recursion depth exceeded in comparison
>>>

Ответы

▲ 2

Нужно изменить подход

Во-первых, для вычисления факториала рекурсия не нужна, достаточно простого цикла

Во-вторых, если факториал ещё понадобится, он есть в math

В третьих, задачу print (f(2023)/f(2020)) несравненно более эффективно решать, обдумав математику:

 res = 1
 for i in range(2021, 2024):
    res *= i
 print(res)
▲ 0
import sys
sys.setrecursionlimit(100000)
def f(n):
    if n==1: return n
    if n>1:return  n*f(n-1)
print (f(2023)/f(2020))

Вот так можно расширить глубину рекурсии