> 送给自己一句话: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)```