回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我奉命用欧几里德方法找到gcd。我最初用Python编写了以下内容:</p>
<pre><code>def gcdRecur(a,b):
if b==0:
print('I am here')
return a
else:
gcdRecur(b,a%b)
print(a,b)
print(gcdRecur(51,187))
</code></pre>
<p>结果是:</p>
<pre><code>I am here
34 17
51 34
187 51
51 187
None
</code></pre>
<p>我不知道为什么它的输出是这样的,然后我意识到在查看其他代码时,一个是显式地使用return语句。你知道吗</p>
<pre><code>def gcdRecur(a,b):
if b==0:
print('I am here')
return a
else:
return gcdRecur(b,a%b)
print(a,b)
print(gcdRecur(51,187))
</code></pre>
<p>我得到了</p>
<pre><code>I am here
17
</code></pre>
<p>所以我得到了我想要的并且学会了我们应该使用return语句而不是仅仅调用函数。你知道吗</p>
<p>我的问题是为什么第一个代码的输出是反向的?为什么下面的代码在没有使用return语句的情况下仍然有效</p>
<pre><code>def tower(n,fr,to,spare):
if n==1:
print_move(fr,to)
else:
tower(n-1,fr,spare,to)
tower(1,fr,to,spare)
tower(n-1,spare,to,fr)
</code></pre>
<p>上面的代码是我在麻省理工学院的edX课程中学到的,它是解决河内塔问题的方法。你知道吗</p>
<p>这里的代码运行良好。所以,当我想以相反的顺序实现时,我们直接调用递归函数,并以正确的顺序使用return语句,对吗?你知道吗</p>