当前位置: 首页> 健康> 养生 > Python-递归

Python-递归

时间:2025/8/23 21:36:02来源:https://blog.csdn.net/qq_43734870/article/details/139266047 浏览次数:0次

思路:

例:计算1-10的和

i = 10def my_sum(i):if i == 0:return ireturn 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:passelse: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']

关键字:Python-递归

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: