第一个示例,按原样返回字符串。
def example(aString, index):
if index == len(aString):
return ""
else:
return aString[index] + example(aString, index + 1)
可以说,这个函数是这样调用的
example("abc", 0)
第一个 if 条件检查索引是否超出了字符串的长度。如果是这种情况,它只会返回一个空字符串。否则,它会在 position 处获取当前字符index
并使用下一个 index 调用相同的函数index + 1
。这称为递归。所以会这样评价
"a" + example("abc", 1)
"a" + ("b" + example("abc", 2))
"a" + ("b" + ("c" + example("abc", 3)))
"a" + ("b" + ("c" + ""))
所以实际输出是abc
.
但例如,
example("abc", 1)
将返回bc
。这种行为称为切片。感谢小次郎指出。
第二个示例,仅逐个字符地打印反转的字符串。
def example(aString, index):
if index < len(aString):
example(aString, index +1)
print(aString[index], end="")
这是另一个基于递归的解决方案。可以说,这个函数也是这样调用的
example("abc", 0)
if
检查确保我们不会超出字符串的长度。如果条件评估为真值,那么我们立即使用下一个索引调用相同的函数(递归)。这将一直持续到我们到达字符串的末尾。当我们到达字符串的末尾时,我们将从函数返回到调用的函数。当我们到达调用的函数时,索引将为2
. 所以,它会打印c
,我们从那里返回到调用它的函数,它的索引为 1,所以它会打印b
。这样它就会反转字符串。
与第一个示例相同的方式,我们可以像这样使用第二个示例反转字符串的最后几个字符。
example("Welcome", 3)
将打印
emoc