擅长:python、mysql、java
<p>您的<code>problem10</code>函数流中有一个错误。归根结底,您并没有实际使用递归<code>problem10</code>函数的结果值。您希望您的代码看起来像这样(假设您希望保留递归,则可以考虑使用循环):</p>
<pre><code>def problem10(prime):
""" calculates the sum of primes from this prime until 2000000 (2 * 10**6) """
if prime >= 2000000:
return 0
elif is_prime(prime):
return prime + problem10(prime + 1)
else:
return problem10(prime + 1)
</code></pre>
<p>请注意,这种函数方法有几个关键点需要考虑:</p>
<ol>
<li>如果prime>;=2000000,则此函数表示空和。因此返回0。在</li>
<li>如果是素数(素数),则此函数应将素数加到和中</li>
<li>否则,这个和等于下一个数中的素数之和(因为我们必须排除较低的数,因为它不是质数)。在</li>
<li><p>与您最初的尝试相比:请注意在return语句中使用表达式大大简化了函数的逻辑(流)。它的可读性确实要高得多。另外,请注意,原来的函数是如何无法工作的,因为:</p>
<p>a.您的函数不更新运行总数(结果)</p>
<p>即使有,最终你还是会把<code>None</code>加到某个东西上,因为你原来的函数在prime>;=2000000的情况下没有返回任何结果。</p></li>
</ol>