擅长:python、mysql、java
<p>您忽略了</em>调用的递归值:</p>
<pre><code>else:
gcdRecur(b, a%b)
</code></pre>
<p>在此处添加<code>return</code>:</p>
^{pr2}$
<p>递归调用返回值不是自动传递的;它就像任何其他函数调用一样,如果希望返回结果,则需要显式地传递。在</p>
<p>演示:</p>
<pre><code>>>> 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
</code></pre>