def swap(aList):
if len(aList) == 0:
return 0
elif len(aList) == 1:
print(aList[0])
return aList[0]
return aList[0] + swap(aList[2:])
aList = [["abcdefgh"]]
swap(aList)
上面的代码打印,但它从a-h按顺序打印aList。 喜欢这样: " ABCDEFGH"
我需要反向打印每两个字母;喜欢这样: " badcfehg"
答案 0 :(得分:2)
为什么要使用2D数组?您只是交换其成员(1D数组)而不是字符串中的字符。只需传入字符串本身 - 索引操作符就可以访问每个字符。另外,请记住+
运算符非交换表示字符串:
def swap(s):
if len(s) == 0:
return ""
elif len(s) == 1:
return s
return s[1] + s[0] + swap(s[2:])
print(swap("abcdefgh")) # --> badcfehg
答案 1 :(得分:0)
每当你遇到递归问题时,你需要问自己两个问题:
在你的情况下,基本情况似乎是正确的,但你返回的内容似乎对len == 0不正确。如果一个字符串的长度为零,你将返回什么?
您的第二个基本案例看起来不错,但您不应混合打印和返回。只需返回aList [0],然后就可以打印掉调用交换函数的输出。
对于你的递归情况,只考虑字符串“ab” - 你如何得到递归调用以返回“ba”。
答案 2 :(得分:0)
这是一个非常简单的方法
def swap (l):
if len (l) < 2:
return list (l)
else:
return [ l[1], l[0] ] + swap (l[2:])
print (swap ("abcdefgh"))
# ['b', 'a', 'd', 'c', 'f', 'e', 'h', 'g']
它也适用于数组
print (swap ([1, 2, 3, 4, 5, 6, 7]))
# [2, 1, 4, 3, 6, 5, 7]