Python 函数递归教程

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.递归需要注意

  • 递:一层一层的递归调用,每一次进行下一次的递归的时候问题的规模都必须是在减小的

  • 归:必须要又一个明确的结束条件,在满足该条件开始一层一层回溯。

在不断的重复过程之后,可以得到一个最终的结果

列题
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

有效字符串需满足:左括号必须用相同类型的右括号闭合。

左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。

示例 1: 示例 2: 示例 3: 示例 4: 示例 5:

输入: "()" 输入: "()[]{} 输入: "(]" 输入: "([)]" 输入: "{[]}"

输出: true "输出: true 输出: false 输出: false 输出: True'''

# Python学习交流QQ群:153708845
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)

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 函数递归教程 - Python技术站

(0)
上一篇 2023年3月31日
下一篇 2023年3月31日

相关文章

  • Python学习:dict和set类型的用法

    1.什么是dict 我们已经知道,list 和 tuple 可以用来表示顺序集合,例如,班里同学的名字: [‘Adam’, ‘Lisa’, ‘Bart’] 或者考试的成绩列表: [95, 85, 59] 但是,要根据名字找到对应的成绩,用两个 list 表示就不方便。 如果把名字和分数关联起来,组成类似的查找表: ‘Adam’ ==> 95 ‘Lisa…

    Python开发 2023年4月2日
    00
  • Python 避免字典和元组的多重嵌套

    一、字典、元组的多重嵌套 例 1:记录全班学生的成绩。 分析:定义一个 SimpleGradebook类, 学生名是字典self._grades的键,成绩是字典self._grades的值。 class SimpleGradebook(): def __init__(self): self._grades = {} def add_student(self,…

    Python开发 2023年4月2日
    00
  • 5个非常有意思的python代码,谁运行谁知道

    Python 能做很多无聊,但有意思的事情,例如接下来的一些案例。 Python 整蛊程序 以下程序,不要发代码,要不实现不了你整蛊的目的。 要打包成一个 exe 程序,发给朋友才有意思。 使用 pip install pyinstaller。 打包命令如下: pyinstaller -F 文件名.py 过程中如果出现 BUG(一般是编码错误),点击导航查看…

    Python开发 2023年4月2日
    00
  • Python中struct 模块的使用教程

    1.struct 简单介绍 struct 是 Python 的内置模块, 在使用 socket 通信的时候, 大多数据的传输都是以二进制流的形式的存在, 而 struct 模块就提供了一种机制, 该机制可以将某些特定的结构体类型打包成二进制流的字符串然后再网络传输,而接收端也应该可以通过某种机制进行解包还原出原始的结构体数据 2.struct 的使用 str…

    python 2023年4月18日
    00
  • python教程:函数快速入门

    函数的定义和使用 def test(x): # x代表形参 ”’ 2*x+1 :param x:整形数字 :return:返回计算结果 ”’ y = 2*x+1 return y p = test(3) # test()表示运行名为test函数,3代表实参,给x进行赋值 print(p) 函数的定义: def: 表示函数的关键字 函数名: 函数的名称, …

    Python开发 2023年4月2日
    00
  • python学习:获取指定目录下所有文件名os.walk和os.listdir

    1.os.walk 返回指定路径下所有文件和子文件夹中所有文件列表 其中文件夹下路径如下: import os def file_name_walk(file_dir): for root, dirs, files in os.walk(file_dir): print(“root”, root) # 当前目录路径 print(“dirs”, dirs) #…

    Python开发 2023年4月2日
    00
  • Python实现搭建-简单服务器教程

    Python动态服务器网页(需要使用WSGI接口),基本实现步骤如下:1.等待客户端的链接,服务器会收到一个http协议的请求数据报2.利用正则表达式对这个请求数据报进行解析(请求方式、提取出文件的环境)3.提取出文件的环境之后,利用截断取片的方法将文件名转化为模块名称4.使用m = __import__(),就可以得到返回值为m的模块5.创建一个env字典…

    python 2023年4月18日
    00
  • Python中12个常用模块的使用教程

    1. time模块 import time *一*#时间戳–》结构化时间–》格式化的字符串时间 —————————————————————————– res1=time.localtime(654126574) print(res1 ) #res1===…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部