我在解决this问题时遇到了以下代码:
f=lambda n:"a"[n:]or f(n-1)+chr(97+n)+f(n-1)
该函数生成特定深度n的abacaba序列
例如:
n = 2,输出:'abacaba'
n = 3,输出:'abacabadabacaba'
问题是,代码如何工作?即,“或”运算符在lambda中如何工作? (我假设上面的代码使用递归,据我所知,通常我们使用循环进行递归,但是在上面的代码中我看不到任何类似于循环的东西)
答案 0 :(得分:3)
它的工作方式与其他地方相同。如果or
的左手参数为真,则表达式的计算结果为真;否则,将得出右边的参数。在这种情况下,"a"[n:]
是n > 0
时的空字符串,因此等效于
def f(n):
if n == 0:
return "a"
else:
return f(n-1) + chr(97+n) + f(n-1)
答案 1 :(得分:0)
让我们分解一下。
f = lambda # declare a variable f that is a function
n: # that takes an int parameter 'n'
"a"[n:] # if n is 0 return 'a'
or # else
f(n-1) # return a recursive call at n - 1
+ # plus
chr(97+n) # character from code 97 + n
+ # plus
f(n-1) # another recursive call