这是我的代码
a = '94050'
i = 0
j = 1
b = []
def f(i,j):
if j <= len(a) and i < len(a):
b.append(a[i:j])
else:
print(b)
i = i + 1
j = j + 1
f(i,j)
刚刚开始学习;不明白出了什么问题。我希望我能得到你的帮助!
下面是一种使用切片和递归的方法:
a = '94050'
def f(a):
if len(a)>1:
print(a[0])
f(a[1:])
else:
print(a[0])
f(a)
给出以下输出
9
4
0
5
0
您自己的代码唯一的问题是,如果打印输出是连续递归完成的,那么您忘记了从函数返回,直到脚本以RecursionError
失败。打印后添加return
解决了问题:
a = '94050'
i = 0
j = 1
b = []
def f(i,j):
print(f'start f(i,j): {i=} {j=}')
if j <= len(a) and i < len(a):
print(f'next: b.append(a[{i}:{j}])')
b.append(a[i:j])
else:
print('else: if j<= len(a)')
print(b)
print('b printed, RETURN')
return # <<< print is done, RETURN
i = i + 1
j = j + 1
f(i,j)
f(i,j)
给予:
start f(i,j): i=0 j=1
next: b.append(a[0:1])
start f(i,j): i=1 j=2
next: b.append(a[1:2])
start f(i,j): i=2 j=3
next: b.append(a[2:3])
start f(i,j): i=3 j=4
next: b.append(a[3:4])
start f(i,j): i=4 j=5
next: b.append(a[4:5])
start f(i,j): i=5 j=6
else: if j<= len(a)
['9', '4', '0', '5', '0']
b printed, RETURN
如果你已经理解了我在开头给出的代码模式,那么你的代码的正确版本应该是在到达else:
语句时停止递归调用:
def f(i,j):
if j <= len(a) and i < len(a):
b.append(a[i:j])
i = i + 1
j = j + 1
f(i,j)
else:
print(b)
f(i,j)