052 遞歸函數

函數遞歸

1.什麼是函數遞歸

  • 函數的嵌套調用:一個函數裏面又寫了一個函數。
  • 函數的遞歸調用:他是一種特殊的嵌套調用,他也是在函數裏面調用函數,可是他在函數體內調用的函數時他本身自己。
  • 若是遞歸函數不斷的在函數體內調用函數本身自己,若是咱們不給終止條件來結束程序運行的話,程序就會進入死循環,那這個時候程序運行將會報錯,所以咱們應該給遞歸函數一個明確的結束條件。
def foo():
    print('from foo')
    foo()

foo()  # 此時程序會進入死循環

2.直接調用

  • 直接調用指的是:直接在函數內部調用函數自身。
1.利用傳參的方式來計算n我的後的第n我的的年齡
2.用到變量做用域的知識點(global、可變數據類型、)
ls = [16]
def func(n):
    if n == 0:
        return ls[0]
    res = func(n-1)+2
    return res
print(func(5))

3.間接調用

  • 間接調用指的是:不在原函數體內調用函數自身,而是經過其餘的方法間接調用函數自身。
def name():
    print('hello,xichen')
    age(20)


def age(n):
    print('my name is ',n)
    name()
    
print(name())
print(age(20))

4.遞歸須要注意

  • 遞:一層一層的遞歸調用,每一次進行下一次的遞歸的時候問題的規模都必須是在減少的
  • 歸:必需要又一個明確的結束條件,在知足該條件開始一層一層回溯。
  • 在不斷的重複過程以後,能夠獲得一個最終的結果python

  • 列題函數

給定一個只包括 '(',')','{','}','[',']' 的字符串,判斷字符串是否有效。code

有效字符串需知足:左括號必須用相同類型的右括號閉合。遞歸

左括號必須以正確的順序閉合。注意空字符串可被認爲是有效字符串。作用域

示例 1: 示例 2: 示例 3: 示例 4: 示例 5:字符串

輸入: "()" 輸入: "()[]{} 輸入: "(]" 輸入: "([)]" 輸入: "{[]}"class

輸出: true "輸出: true 輸出: false 輸出: false 輸出: True'''變量

def isValid(s: str) -> bool:
    print(s)
    # s = ''
    if not s:  # 判斷s是否爲空
        return True

    if s.find('[]') != -1 or s.find('{}') != -1 or s.find('()') != -1:  # 證實s裏面有 ()/[]/{}
        if '{}' in s:
            s = s.replace('{}', '')
        if '[]' in s:
            s = s.replace('[]', '')
        if '()' in s:
            s = s.replace('()', '')
        if s == '':  # s = '[]'
            return True

        res = isValid(s)
        print('res:',res)
        if not res:
            return False
    else:
        return False
    return True
res = isValid(s)
print(res)
相關文章
相關標籤/搜索