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)
相关文章
相关标签/搜索