bir Python nesnesi çağrılırken özyineleme hatası maksimum özyineleme derinliği aşıld

√ñyinelemeli i≈ülevler, sƒ±nƒ±rsƒ±z olarak kendilerini suresiz olarak adlandƒ±rabilirler. Belirli sayƒ±da yineleme uzerinde çalƒ±≈üan yinelemeli bir i≈ülev yazarsanƒ±z, "kar≈üƒ±la≈ütƒ±rmada maksimum yineleme derinliƒüi a≈üƒ±ldƒ±‚" Python hatasƒ±.

Bu kƒ±lavuz, bu hatanƒ±n ne anlama geldiƒüini ve neden √∂nemli olduƒüunu a烱klar. Programƒ±nƒ±zda nasƒ±l duzelteceƒüinizi √∂ƒürenebilmeniz için bu hatanƒ±n bir √∂rneƒüini inceleyeceƒüiz.

karşılaştırıldığında maksimum özyineleme derinliği aşıldı

√ñzyinelemeli i≈ülevler kendilerini çaƒüƒ±ran i≈ülevlerdir. bir programa bir ç√∂zum bulun.

ƒ∞yi yazƒ±lmƒ±≈ü √∂zyinelemeli i≈ülevler, sonsuz olarak çalƒ±≈ümamalarƒ±nƒ± saƒülamak için sƒ±nƒ±rlar içerir. Bu, bir i≈ülevin yalnƒ±zca belirli bir ko≈üul kar≈üƒ±lanana kadar çalƒ±≈ümasƒ± gerektiƒüi anlamƒ±na gelebilir.

Belirli sayƒ±da yinelemeden (genellikle 997) daha fazlasƒ±nƒ± yuruten √∂zyinelemeli bir i≈ülev yazarsanƒ±z, ≈üunu g√∂rursunuz. bir sonraki yinelemeye geçtiƒüinizde bir hata.

Bunun nedeni Python’un bir √∂zyineleme algoritmasƒ±nƒ±n derinliƒüini sƒ±nƒ±rlamasƒ±dƒ±r. Bu, i≈ülevin kendisini kaç kez çaƒüƒ±rabileceƒüini g√∂sterir.

Bu kodu kullanarak Python kabuğunuzdaki özyineleme sınırını göruntuleyebilirsiniz:

Bir Örnek Senaryo

Haydi‚Äô Fibonacci Dizisindeki bir sayƒ±yƒ± hesaplayan √∂zyinelemeli bir i≈ülev yazƒ±n. Fibonacci Dizisinde dizideki bir sonraki sayƒ±, son iki sayƒ±nƒ±n toplamƒ±dƒ±r. Sƒ±radaki ilk iki sayƒ± 0 ve 1’dir.

Katƒ±lƒ±mcƒ±larƒ±n %81’i bir eƒüitim kampƒ±na katƒ±ldƒ±ktan sonra teknik i≈ü beklentileri konusunda daha emin hissettiklerini belirtti. Bugun bir eƒüitim kampƒ± ile e≈üle≈ütirin.

Ortalama bir eƒüitim kampƒ± mezunu, bir eƒüitim kampƒ±na ba≈ülamaktan ilk i≈üini bulmaya kadar, kariyer geçi≈üinde altƒ± aydan az zaman harcadƒ±.

İşte özyinelemeli bir işlevdir. Fibonacci Dizisini hesaplar:

Eƒüer belirttiƒüimiz sayƒ± 1’den kuçuk veya 1’e e≈üitse, bu sayƒ± d√∂ndurulur. Aksi takdirde, programƒ±mƒ±z sƒ±radaki bir sonraki sayƒ±yƒ± hesaplar.

Sonra, i≈ülevimizi çaƒüƒ±racaƒüƒ±z:

yazdır (fibonacci(5000))

Bu kod, Fibonacci Dizisindeki 5.000. sayƒ±dan sonraki sayƒ±yƒ± hesaplar.Kodumuzu çalƒ±≈ütƒ±ralƒ±m ve ne olduƒüunu g√∂relim:
< /p>

Kodumuz uzun bir hata mesajƒ± veriyor. Bu mesaj kƒ±sa olmasƒ± için kƒ±saltƒ±lmƒ±≈ütƒ±r.

Çözum

Python, bizi yƒ±ƒüƒ±n ta≈ümasƒ±na kar≈üƒ± korumak için bir √∂zyineleme hatasƒ± olu≈üturdu. onunki, bir yƒ±ƒüƒ±ndaki i≈üaretçi yƒ±ƒüƒ±n sƒ±nƒ±rƒ±nƒ± a≈ütƒ±ƒüƒ±nda gerçekle≈üir. Bu hata olmasaydƒ±, programƒ±mƒ±z mevcut olandan daha fazla bellek alanƒ± kullanmaya çalƒ±≈üƒ±rdƒ±.

Bu hatayı, dizimizi yinelemeli hale getirerek veya programımızda özyineleme sınırını artırarak duzeltebiliriz.< /p>

1. Çözum: Yinelemeli Bir Algoritma Kullanın

Programımızı bunun yerine yinelemeli bir yaklaşım kullanacak şekilde değiştirebiliriz özyinelemeli bir yaklaşımın tanımı:

Bu kod, Fibonacci Dizisindeki ilk be≈ü sayƒ±yƒ± hesaplar. Hesapladƒ±ƒüƒ±mƒ±z deƒüerlerin sayƒ±sƒ±nƒ± artƒ±rabiliriz ama bu aynƒ± zamanda programƒ±mƒ±zƒ±n çalƒ±≈ümasƒ± için gereken sureyi de artƒ±racaktƒ±r. Programƒ±mƒ±z ≈üunu d√∂ndurur:

1

1

2

3

5

Bu yakla≈üƒ±m, √∂zyinelemeli i≈ülevler kullanmadƒ±ƒüƒ±mƒ±z için √∂zyineleme hatasƒ±nƒ± atlar. Bunun yerine, listedeki sonraki sayƒ±yƒ± hesaplamak için bir while d√∂ngusu kullanƒ±rƒ±z.

Çözum #2: Özyineleme Sınırını Artırın

Python’un setrecursionlimit( i≈ülevini kullanarak varsayƒ±lan √∂zyineleme sƒ±nƒ±rƒ±nƒ± geçersiz kƒ±labilirsiniz) ) y√∂ntem:

Bu kod, maksimum yineleme derinliğini 5.000 olarak ayarlar. Python yorumlayıcısının kullanabileceği kaynaklara bağlı olarak yığın taşmasına neden olabileceğinden bu yöntemi kullanırken dikkatli olmalısınız.

"Python.Engineering hayatƒ±ma en çok ihtiyacƒ±m olduƒüu anda girdi ve hƒ±zlƒ± bir ≈üekilde yardƒ±mcƒ± oldu. Beni bir eƒüitim kampƒ±yla e≈üle≈ütiriyorum. Mezun olduktan iki ay sonra, hayattaki deƒüerlerim ve hedeflerim ile uyumlu hayalimdeki i≈üi buldum!"

Venus, Yazılım Muhendisi Rockbot

Genel olarak, √∂zyineleme sƒ±nƒ±rƒ±nƒ± artƒ±rmak yerine yinelemeli bir yakla≈üƒ±m kullanmak için bir i≈ülevi yeniden yazmak en iyisidir.

Sonuç

"maksimum √∂zyineleme kar≈üƒ±la≈ütƒ±rmada derinlik a≈üƒ±ldƒ±‚" Python’un yerle≈üik √∂zyineleme sƒ±nƒ±rƒ±nƒ± a≈üan bir i≈ülevi yurutmeye çalƒ±≈ütƒ±ƒüƒ±nƒ±zda hata olu≈üur. Yinelemeli bir yakla≈üƒ±m kullanmak için programƒ±nƒ±zƒ± yeniden yazarak veya Python’da yineleme sƒ±nƒ±rƒ±nƒ± artƒ±rarak bu hatayƒ± duzeltebilirsiniz.

Artƒ±k bu hatayƒ± bir profesyonel gibi duzeltmek için ihtiyacƒ±nƒ±z olan bilgiye sahipsiniz!

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method