这是一种递归情况,您正在使用原始输入的越来越短的子字符串一遍又一遍地调用函数本身,直到它是长度为 1 的字符串(原始输入中的最后一个),在这种情况下它开始打印它然后“展开”并反向打印字符串的其余部分。
看看这个带注释的代码:
def function(s):
if len(s) == 1:
print 'single:', s[0], # (A) this is where your first output is generated for a single character
else:
print 'calling function again with ',s[1:]
function(s[1:]) # (B) you call function again, i.e., your recursive call
print ' unwind->', s[0], # (C) the "unwinding" step, i.e, finish the rest
# of the function when you return from the recursive call
你得到的输出是:
calling function again with 234
calling function again with 34
calling function again with 4
single: 4 unwind-> 3 unwind-> 2 unwind-> 1
第一次调用该函数时,您直接进入else
子句并在 (B) 行中再次调用该函数,但这次使用“234”。现在函数再次启动,但使用“234”,您再次进入else
并再次调用函数,但现在使用“34”,函数再次运行,现在您再次进入else
并仅使用“4”调用函数" .. 这次因为它的长度为 1,所以你打印它(A 行)。
现在您从这个函数返回(展开过程) - 并从您进行递归调用之前的位置恢复,并通过打印当前剩余字符的第一个字符(行 C)反向打印字符串的其余部分.
第一次遇到递归可能很难掌握——这很正常。在某些时候,它会点击并变得清晰。您可能想阅读一些关于一般概念的内容并搜索一些清晰的注释示例(大多数 CS/编程书籍都会有一些)。
这是一个简短的 YouTube 视频,通过一个简单的示例解释了 Python 中的递归,希望对您有所帮助:http ://www.youtube.com/watch?v=72hal4Cp_2I