通过递归和切片依次输出字符串的每个字符,但我的代码没有任何输出



这是我的代码

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)

最新更新