函式的遞迴呼叫:就是在呼叫乙個函式的過程中又直接或間接地呼叫了自己
示例1:直接呼叫自己
def
foo():
print
('hello'
) foo(
)foo(
)
示例2:間接的呼叫自己
def
foo():
print
('from foo'
) bar(
)def
bar():
print
('from bar'
) foo(
)bar(
)
為何死遞迴會丟擲異常?
因為無限的遞迴會導致記憶體的溢位,所以python設定了最大的遞迴層數
import sys
print
(sys.getrecursionlimit())
#預設1000層
print
(sys.getrecursionlimit(
2000))
#可以進行更改
所以:不應該無限遞迴呼叫下去,應該在滿足某種條件下結束遞迴呼叫,然後返回
salary(5)
=salary(4)
+10salary(4)
=salary(3)
+10salary(3)
=salary(2)
+10salary(2)
=salary(1)
+10salary(1)
=18n=1 salary(n)=18
n!=1 salary(n)
= salary(n-1)
+10defsaraly
(n):
if n==1:
return
18return saraly(n-1)
+10print
(saraly(5)
)
示範二:
nums=
[111,[
222,
[333,[
444,
[5555,[
6666,[
777,
[888,[
9999]]
]]]]
]]]def
func
(num)
:for i in num:
iftype
(i)is
list
: func(i)
else
:print
(i)func(nums)
從小到大排列的乙個數字列表(二分法)
nums =[11
,13,32
,47,53
,73,84
,91,101
,111
,222
,333
,444
,5555
]def
func
(num,lis):if
len(lis)==0
:print
('沒找到'
)return
print
(lis)
res=
len(lis)//2
mid_num = lis[res]
if num>mid_num:
right_l=lis[res+1:
] 切分
func(num,right_l)
elif numleft_l=lis[
:res]
func(num,left_l)
else
:print
('找到了'
)func(
0,nums)
#沒找到,最後會二分出乙個空括號,由此判斷找不到
函式的遞迴呼叫
乙個函式在它的函式體內呼叫它自身稱為遞迴呼叫。這種函式稱為遞迴函式。c語言允許函式的遞迴呼叫。在遞迴呼叫中,主調函式又是被調函式。執行遞迴函式將反覆呼叫其自身。每呼叫一次就進入新的一層。例如有函式f如下 int f int x 這個函式是乙個遞迴函式。但是執行該函式將無休止地呼叫其自身,這當然是不正...
函式的遞迴呼叫
遞迴函式 呼叫自己本身的函式叫遞迴函式 實現如下 main.c define crt secure no warnings include include 遞迴列印字串逆序 int reverse char str if str 0 判斷遞迴結束條件 reverse str 1 printf c s...
函式的遞迴呼叫
函式的遞迴呼叫 是函式巢狀呼叫的一種特殊形式 具體是指 在呼叫乙個函式的過程中又直接或者間接地呼叫到本身 直接呼叫本身 deff1 print 是我是我還是我 f1 f1 間接接呼叫本身 deff1 print f1 f2 deff2 print f2 f1 f1 一段 的迴圈執行的方案有兩種 方式...