我试图理解双递归,但我没有到达任何地方。
def f(s):
if len(s) <= 1:
return s
return f(s[1:]) + s[0]
print f('world')
dlrow
如果正确,上面的代码将执行以下操作:
然后:
所以dlrow将如上所示打印。
当你进行双递归时,我无法理解代码:
def f(s):
if len(s) <= 1:
return s
else:
return f(f(s[1:])) + s[0] #Note double recursion
print f('world')
有人可以向我解释这个双递归是如何工作的吗?
答案 0 :(得分:4)
这是一种检测递归代码的简便方法
import inspect
def f(s):
print " " * (len(inspect.stack())-2), '>>', s
if len(s) <= 1:
print " " * (len(inspect.stack())-2), '<<', s
return s
else:
retval = f(f(s[1:])) + s[0] #Note double recursion
print " " * (len(inspect.stack())-2), '<<', retval
return retval
print f('world')
打印
>> world
>> orld
>> rld
>> ld
>> d
<< d
>> d
<< d
<< dl
>> dl
>> l
<< l
>> l
<< l
<< ld
<< ldr
>> ldr
>> dr
>> r
<< r
>> r
<< r
<< rd
>> rd
>> d
<< d
>> d
<< d
<< dr
<< drl
<< drlo
>> drlo
>> rlo
>> lo
>> o
<< o
>> o
<< o
<< ol
>> ol
>> l
<< l
>> l
<< l
<< lo
<< lor
>> lor
>> or
>> r
<< r
>> r
<< r
<< ro
>> ro
>> o
<< o
>> o
<< o
<< or
<< orl
<< orld
<< orldw
orldw
答案 1 :(得分:0)
2019年,使用在线编译器,例如www.onlinegdb.com/online_python_compiler, 上面的打印行不起作用。这是工作代码:
import inspect
def f(s):
print(" " * (len(inspect.stack())-2), '>>', s)
if len(s) <= 1:
print( " " * (len(inspect.stack())-2), '<<', s)
return s
else:
retval = f(f(s[1:])) + s[0] #Note double recursion
print( " " * (len(inspect.stack())-2), '<<', retval)
return retval
print(f('world'))