有人能解释双递归python吗?

2024-10-03 23:31:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解双递归,但我什么也做不到。在

def f(s):
    if len(s) <= 1:
        return s
    return f(s[1:]) + s[0]
print f('world')

dlrow

如果正确,上述代码将执行以下操作:

  1. f(s[1:])+s[0]==>;f(世界)+w
  2. f(s[1:])+s[0]==>;f(rld)+o
  3. f(s[1:])+s[0]==>;f(ld)+r
  4. f(s[1:])+s[0]==>;f(d)+l<;==此处长度(s)==1,因此s=d

然后:

  1. d+l=dl
  2. dl+r=dlr
  3. dlr+o=dlro
  4. dlro+w=D行

所以dlrow将按上面所示打印。在

当您将代码设为双递归时,我无法理解它:

^{pr2}$

有人能给我解释一下这个双递归是怎么工作的吗?在


Tags: 代码gtworldlenreturnifdef世界
2条回答

2019年,使用在线编译器,如www.onlinegdb.com/online_python_编译器, 上述打印线不工作。以下是工作代码:

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'))

这里有一种简单的方法来检测递归代码

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')

印刷品

^{pr2}$

相关问题 更多 >