函式的遞迴呼叫

2021-10-24 02:32:53 字數 2012 閱讀 7704

函式的遞迴呼叫:就是在呼叫乙個函式的過程中又直接或間接地呼叫了自己

示例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 一段 的迴圈執行的方案有兩種 方式...