我有这段简单的代码,它只是一个模板,不起作用,但应该是我想要实现的目标的基础:
def to_s(x):
return str(x * 2)
def f(x):
print(x + "_string")
x_set = [2,3,4,5]
for i in x_set:
var = to_s(x)
f(var)
f(str(1))
我在这里陷入了递归的逻辑,特别是如何确定基本情况。
我想使用递归来实现它,以便我可以得到以下输出:
"1_string"
"4_string"
"6_string"
"8_string"
"10_string"
输出可以有任何顺序,并且
我只需要一份打印声明。
问题在于嵌套递归调用中从 for 循环开始的迭代。我们可以像我一样有一个扩展版本:
def to_s(x):
return str(x * 2)
x_set = [2,3,4,5]
def f(x, n):
if n < 0:
return 0
if n == len(x_set):
print(x + "_string")
var = to_s(x_set[n-1])
f(var, n-1)
if n < len(x_set):
print(x + "_string")
f(str(1), len(x_set))
但这不是我感兴趣的,有没有一种更简单的方法可以做到这一点,而无需添加额外的
n
参数并获取 x_set ?
更新
我正在进行更复杂的计算,为了简单起见,我只是将其替换为
print(x + "_string")
,所以递归的原因是我不想重复代码,并且在我的情况下递归对我来说看起来很完美。
如果你想使用递归遍历列表,你可以这样做:
def f(x):
if x == []:
print('1_str')
return 0
print(str(x[0] * 2) + '_str')
f(x[1:])
x = [2,3,4,5]
f(x)
但是这是无效的,取切片是一个昂贵的操作。 以相反的顺序解析列表会更快。
def f(x):
if x == []:
print('1_str')
return 0
print(str(x[-1] * 2) + '_str')
x.pop()
f(x)