我很新的python和有關遞歸錯誤的幾個問題:「RuntimeError:超過最大遞歸深度」。 我知道這個錯誤是在Python中以避免堆棧溢出。 我現在已經做的示例代碼是什麼在這裏:如何清除python遞歸?
import sys
def print1():
print("1")
return print2()
def print2():
print("2")
return print3()
-------------
def print3() - def print7() <- (wrote here like this to save some place)
-------------
def print8():
print("8")
return print9()
def print9():
print("9")
def main():
sys.setrecursionlimit(11)
print sys.getrecursionlimit()
print1()
if __name__ == "__main__":
main()
現在,如果已經設置遞歸限制到11,那麼代碼將運行,不會有什麼錯誤。 輸出:
11
1
2
3
4
5
6
7
8
9
如果我設置了遞歸限制爲10,那麼就會出現一個錯誤:
10
1
2
3
4
5
6
7
8
Traceback (most recent call last):
File "nimetu1.py", line 44, in <module>
main()
File "nimetu1.py", line 41, in main
print1()
File "nimetu1.py", line 5, in print1
return print2()
File "nimetu1.py", line 9, in print2
return print3()
File "nimetu1.py", line 13, in print3
return print4()
File "nimetu1.py", line 17, in print4
return print5()
File "nimetu1.py", line 21, in print5
return print6()
File "nimetu1.py", line 25, in print6
return print7()
File "nimetu1.py", line 29, in print7
return print8()
File "nimetu1.py", line 33, in print8
return print9()
RuntimeError: maximum recursion depth exceeded
我的問題是,有沒有什麼解決辦法清除遞歸或一些其他的解決方案,如何編寫類似於此的代碼,其中一個函數調用另一個函數,並且不需要最後一個調用當前函數的函數。 例如,我可以清除遞歸print2()並運行代碼遞歸限制爲10. 我想寫一個代碼,其中總是函數調用另一個函數,所以爲了節省RAM我想我需要一些替代或其他解決方案。 代碼也可能會多次調用相同的函數..所以稍後可能會有3個不同的相同功能塊運行,這就是我想要避免的。
由於您沒有解釋什麼是用例,因此從您的代碼顯示的內容來看,您肯定會錯誤地解決您的問題。 –
我的目標是爲我自己製作基於終端的信息保存器。 例如,有一個名爲Mainmenu的函數,可以選擇調用子菜單,例如,寫入1以進入子菜單1或寫入2以進入子菜單2,所有菜單菜單和子菜單都將是函數..並且這就像函數總是調用其他函數一樣。 。在每個子菜單上,我想添加「後退」按鈕,就像插入0一樣,你可以返回上一級菜單或子菜單,這樣返回按鈕必須調用上次菜單功能... – Venomed
你應該將菜單描述爲對象,不是作爲功能。 –