擅长:python、mysql、java
<p>您会注意到,如果您想像对<code>39</code>到{<cd2>}所做的那样,您将重复代码。在这种情况下,递归可以帮助(调用函数本身):</p>
<pre><code>def persistence(num):
if num < 10:
return 0 # Only one digit. Can't iterate over it
num_str = str(num)
total = 1
for i in num_str:
total = total * int(i)
return 1 + persistence(total) # We do 1 + because we just did an iteration
</code></pre>
<p>假设输入是<code>39</code>:</p>
<ol>
<li>39不小于10,所以我们进入下一个阶段。在</li>
<li>我们使用你提供的相同代码来计算数字相乘的总数</li>
<li>我们现在在<code>total</code>分配了一个新的号码(27)。我们通过再次调用函数来重复上面的代码,但是没有传递39,而是传递了27。在</li>
<li>27不小于10,所以我们进入下一个阶段</li>
<li>我们得到数字的乘法</li>
<li>我们重复,直到得到一个4(1*4)的<code>total</code>。在</li>
<li>我们称之为persistence(4),但它返回<code>0</code>,因为4<;10。没有对数字4进行迭代(因此我们返回<code>0</code>)</li>
<li>此时,递归已经停止。Python现在回溯所有以前的调用。它加0+1+1+1得到3。在</li>
</ol>
<p>递归一开始有点棘手,但基本上它是一个调用自己的函数,但它有“基本情况”来停止函数的无限期运行。在这种情况下,我们的基本情况是如果数字小于10(它有一个数字)。此数字上没有迭代。在</p>