您忽略了调用的递归值:else:
gcdRecur(b, a%b)
在此处添加return:
^{pr2}$
递归调用返回值不是自动传递的;它就像任何其他函数调用一样,如果希望返回结果,则需要显式地传递。在
演示:>>> def gcdRecur(a, b, _indent=''):
... global level
... print '{}entering gcdRecur({}, {})'.format(_indent, a, b)
... if b == 0:
... print '{}returning a as b is 0: {}'.format(_indent, a)
... return a
... else:
... recursive_result = gcdRecur(b, a%b, _indent + ' ')
... print '{}Recursive call returned, passing on {}'.format(_indent, recursive_result)
... return recursive_result
...
>>> gcdRecur(60,100)
entering gcdRecur(60, 100)
entering gcdRecur(100, 60)
entering gcdRecur(60, 40)
entering gcdRecur(40, 20)
entering gcdRecur(20, 0)
returning a as b is 0: 20
Recursive call returned, passing on 20
Recursive call returned, passing on 20
Recursive call returned, passing on 20
Recursive call returned, passing on 20
20