Python-递归

思路:

例:计算1-10的和

i = 10

def my_sum(i):
    if i == 0:
        return i
    return i + my_sum(i-1)


res = my_sum(i)
print(res)

案例一:把下面列表的每一个值单独打印出来

复制代码
# l = [1, 2, [3, [4, [5, [6, [7, [8, [9, [10, [11, 12]]]]]]]]]]

解题:

(1)上述问题太复杂,可以试着简化。如:l = [1, 2,[3, 4] ;

复制代码
l = [1, 2,[3, 4]]
for i in l:
     print(i)

运行结果:

(2)对取出来的值进行判断,是否为列表,如果是列表就继续拆分,反之打印;

复制代码
l = [1, 2,[3, 4]]
for i in l:
    if type(i) is list:  # 如果取出来的值,是个列表,那就继续拆
        for j in i :
            if type(j) is list:
                pass
            else:
                print(j)
    else:
        print(i)

运行结果:

(3)通过上述操作发现,如果发现取出来的值包含列表,那继续拆的代码与第一次拆分带啊一样,逻辑一样。唯一不一样的是,两次遍历的列表不一样;

复制代码
def func(li):
    for i in li: # 这里的L不可写死,因为每次遍历的列表是不一样的,这里定义为参数
        if type(i) is list:  # 如果取出来的值,是个列表,那就继续拆
            func(i) # 这里 i 是列表
        else:
            print(i)

func(l)

运行结果:

总结:

l = [1, 2, [3, [4, [5, [6, [7, [8, [9, [10, [11, 12]]]]]]]]]]

# l = [1, 2,[3, 4]]
def func(li):
    for i in li: # 这里的L不可写死,因为每次遍历的列表是不一样的,这里定义为参数
        if type(i) is list:  # 如果取出来的值,是个列表,那就继续拆
            func(i) # 这里 i 是列表
        else:
            print(i)

func(l)

运行结果:

1

2

3

4

5

6

7

8

9

10

11

12

案例二:把下列的字符串做全排列(即将abcd按不同的顺序做全排列,且不能重复)

s = 'abcd'

解题:

思路:

总结:

s = 'abc'
l = list(s)  # 是因为字符串不可以换位置,切换为列表


def permutation(l, level):
    if level == len(l):
        print(l)

    # 通过索引换位置
    for i in range(level, len(l)):  # 这里写l,无论字符串的长度是多少,都可以
        l[level], l[i] = l[i], l[level]  # 将列表中level 和i 位置的数据互换
        permutation(l, level + 1)
        # 将列表换回原位置
        l[level], l[i] = l[i], l[level]


permutation(l,0)

运行结果:

['a', 'b', 'c']

['a', 'c', 'b']

['b', 'a', 'c']

['b', 'c', 'a']

['c', 'b', 'a']

['c', 'a', 'b']

相关推荐
belldeep19 分钟前
python:reportlab 将多个图片合并成一个PDF文件
python·pdf·reportlab
FreakStudio3 小时前
全网最适合入门的面向对象编程教程:56 Python字符串与序列化-正则表达式和re模块应用
python·单片机·嵌入式·面向对象·电子diy
丶21363 小时前
【CUDA】【PyTorch】安装 PyTorch 与 CUDA 11.7 的详细步骤
人工智能·pytorch·python
_.Switch4 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
一个闪现必杀技4 小时前
Python入门--函数
开发语言·python·青少年编程·pycharm
小鹿( ﹡ˆoˆ﹡ )4 小时前
探索IP协议的神秘面纱:Python中的网络通信
python·tcp/ip·php
卷心菜小温5 小时前
【BUG】P-tuningv2微调ChatGLM2-6B时所踩的坑
python·深度学习·语言模型·nlp·bug
陈苏同学5 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
唐家小妹5 小时前
介绍一款开源的 Modern GUI PySide6 / PyQt6的使用
python·pyqt
羊小猪~~6 小时前
深度学习项目----用LSTM模型预测股价(包含LSTM网络简介,代码数据均可下载)
pytorch·python·rnn·深度学习·机器学习·数据分析·lstm