当前位置:首页>python>python-递归函数(全排列算法)

python-递归函数(全排列算法)

  • 2026-09-06 16:30:36
python-递归函数(全排列算法)

> 送给自己一句话:Python 不难,难的是坚持;编程不难,难的是动手,祝你早日学成 Python,实现自己的目标

*学习的脚步不要停歇,因为时代在进步我们更要进步,学到老活到老。希望能和大家共同成长,也希望有任何问题,大家评论、私信,一起交流进步

一个上进心极强的入门小白,虽然之前的文章总是更新着会断更,但是我相信这次我能把python这门语言能啃下来

如果超过两天断更了,更幸运的是你看到了这里,希望能够在最后一篇文章的评论区去催更,在这里感谢你的催更*

> 点赞评论催更是我更新的最大动力!这样是代表着我被人看到了。

---

函数嵌套:

1. 定义的时候进行嵌套(装饰器)

2. 调用的时候嵌套

递归:在调用函数的过程中又一次的调用到了自己本身这个函数

```python# -*- coding: utf-8 -*-'''@File    :   14-递归函数.py@Author  :   HY @Version :   1.0@Desc    :   None'''#直接调用def func():    print("nihao")    func()func()#间接调用def func1():    print("nihao")    func2()def func2():    print("nihao")    func1()func1()#这片代码是无限调用的#这段代码会一直产生名称空间,如果一直运行会报错,因为python#限制了这样的调用,如果没有这样的#限制会出现名称空间把内存空间给撑爆的风险,怎么才能结束递归的调用呢?#可以添加判断条件,满足条件不调用def func1():    print("nihao")    func2()a=1def func2():	global a    a+=1    print("nihao")    if a>10:        return    else:        func1()func1()```

> [!question] 问题

> 使用递归方法计算1-10的和

```python# -*- coding: utf-8 -*-'''@File    :   14-递归函数.py@Author  :   HY @Version :   1.0@Desc    :   使用递归方法计算1-10的和'''i=10toalt=0def my_sum():    global i ,toalt    toalt+=i    i-=1    if  i==0:        return    my_sum()my_sum()print(toalt)'''@OutPut    :   55'''#经过优化后的代码片段如下# -*- coding: utf-8 -*-'''@File    :   14-递归函数.py@Author  :   HY @Version :   1.0@Desc    :   使用递归方法计算1-10的和'''i=10def my_sum(i):    if  i==0:        return 0 #这里需要返回的数值是0因为如果不返回0会出现none和int类型相加会出现报错    return i+my_sum(i-1) #返回的是10+my_sum(9)+....my_sum(0)res=my_sum(i) #res是承接结果 my_sum(10)+my_sum(9)+...my_sum(0)print(res)'''@OutPut    :   55'''```

> [!question] 问题

> 全排列s=“abc”这个字符串

```python# -*- coding: utf-8 -*-'''@File    :   14-递归函数.py@Author  :   HY @Version :   1.0@Desc    :   全排列s=“abc”这个字符串'''s='abc'l=list(s)def permutation(l,level):#level的意思是从第几次开始进行    if level == len(l):        print(l)    for i in range(level,len(l)):        l[level],l[i] = l[i], l[level]        permutation(l,level+1)        l[level],l[i] = l[i], l[level]permutation(l,0)'''@OutPut    :   ['a', 'b', 'c']['a', 'c', 'b']['b', 'a', 'c']['b', 'c', 'a']['c', 'b', 'a']['c', 'a', 'b']'''```

> [!question] 问题

> 利用递归的特性进行二分法的使用后,目的是在l列表中找到我们想找的那个值

> l=[-5,-3,-1,-8,0,3,6,8,4,2,1,-4]

```python# -*- coding: utf-8 -*-'''@File    :   14-递归函数.py@Author  :   HY @Version :   1.0@Desc    :   二分法利用递归的特性进行二分法的使用后,目的是在l列表中找到我们想找的那个值'''l = [-5,-3,-1,-8,0,3,6,8,4,2,1,-4]l.sort()def check(num, li):    # 递归终止条件:列表为空    if len(li) == 0:        print("no")  # 添加未找到提示        return    mid_num = len(li) // 2  # 使用整数除法更规范    mid = li[mid_num]    print(li)    print(mid)    if num == mid:        print("yes")    elif num < mid:        check(num, li[:mid_num])  # 左半部分(不含中间值)    else:  # num > mid        check(num, li[mid_num+1:])  # 右半部分(不含中间值)num = int(input())     print(l)check(num,l)```

最新文章

随机文章