思路:
例:计算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']