<p>前言:在我写这个答案的同时,很多答案都得到了有意义的编辑。别跟我作对。</p>
<p>我把我的两分钱投在这里只是因为有很多过于复杂的答案。
这是一个正确的复制粘贴操作的努力。</p>
<pre><code>def recursive_me(mystring, total=0):
chars = len(mystring)
if chars is 0:
print("Done")
return total
else:
first = int(mystring[0])
total += first
print(total)
recursive_me(mystring[1:], total)
</code></pre>
<p>首先,如果字符串中没有左字符,我们检查基本情况。如果字符串长度为0,则返回计算的总弹药量。</p>
<p>否则,我们将第一个字符转换为int,并将其添加到total中。第一个错误是您编写了<code>str[0]</code>。<code>str</code>是一个python内置类型,产生的错误类似于“str不可订阅”。</p>
<p>此错误表示“[]运算符无法对<code>str</code>进行操作。如果你试着做<code>1[0]</code>同样的事情,因为<code>1</code>是一个整数。“[%”运算符只能对列表、元组和字符串进行操作(我可能忘记了一些内置类型)。</p>
<p>第二个错误是添加部分。你已经写了<code>total = + first</code>,但是你要找的运算符是<code>+=</code>,实际上这只是写<code>a = a+b</code>的一种简化方法。</p>
<p>另外,您最初的问题是关于“python”忘记了“total”的值。这是因为您要么向前传递该值,要么以一种“强制”它的方式编写递归函数,即所谓的,当场计算下一次对函数的调用。</p>
<p>在我的示例中,我将发送递归函数的下一个调用,即当前的总值。在上面@uselpa;给出的示例中,他让python通过将函数放在运算符<code>+</code>之后来计算对该函数的下一次调用:</p>
<pre><code>return int(mystring[0]) + recursive_me(mystring[1:])
</code></pre>
<p>这就变成了(对于<code>recursive_me("4567")</code>)</p>
<pre><code>return int(4)+recursive_me("567")
return int(4)+int(5)+recursive_me("67")
....
return int(4)+int(5)+int(6)+int(7)+0
</code></pre>
<p>因为python需要在这里返回一个值,但是表达式一直在调用新函数,而python在将所有函数求值为一个最终数字(在本例中至少是这样)之前无法返回。</p>