Recursive fonksiyon da nonetype hatası

aşağıda ki kod 1200 gibi yüksek değerler verince şöyle bir hata veriyor

TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'
def f(n):
    
    def dene(n):
        try:
            n = int(n)
            return n
        except:
            while not isinstance(n,int):
                print("n must be integer ",end="")
                return dene(input())
                
    n = dene(n)
    if n==1:
        return 1
    elif n==2:
        return 2
    
    else:
        return n * f(n-1)

          
print(f(input(" ")))

return n * dene(n-1) 

Hatanin olustugu tam deger (bende) 999.

Call stack 1000’i gectigi icin python “fazla recursion” korumasi devreye giriyor:

Traceback (most recent call last):
  File "a.py", line 22, in <module>
    print(f(input(" ")))
  File "a.py", line 19, in f
    return n * f(n-1)
  File "a.py", line 19, in f
    return n * f(n-1)
  File "a.py", line 19, in f
    return n * f(n-1)
  [Previous line repeated 994 more times]
  File "a.py", line 12, in f
    n = dene(n)
  File "a.py", line 5, in dene
    n = int(n)
RecursionError: maximum recursion depth exceeded while calling a Python object

…fakat except her seyi yuttugu icin bu exception’i da yutuyor.

Burada gereginden fazla exception’i (butun exception’lari) neden catch etmememiz gerektigine dair cok guzel bir ders var.

Bu arada kodda faktoryeli alinacak sayiyi alan dene fonksiyonu ve input(" ") kismiyla, bu faktoryeli alan recursive fonksiyon kismini birbirinden ayirman lazim veya ayirirsan her sey daha kolaylasir.

4 Beğeni