for 循环内的递归,无需更改或参数

问题描述 投票:0回答:1

我有这段简单的代码,它只是一个模板,不起作用,但应该是我想要实现的目标的基础:

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"
  1. 输出可以有任何顺序,并且

  2. 我只需要一份打印声明。

问题在于嵌套递归调用中从 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")
,所以递归的原因是我不想重复代码,并且在我的情况下递归对我来说看起来很完美。

python algorithm recursion
1个回答
0
投票

如果你想使用递归遍历列表,你可以这样做:

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)

© www.soinside.com 2019 - 2024. All rights reserved.