擅长:python、mysql、java
<p>你的第二次尝试没有什么问题。你的基本情况是错误的-它应该是<code>if pos >= len(values)</code>。另外,您是在<em>包装器</em>函数上递归,而不是helper/inside函数。最后,您需要<code>return</code>调用包装器函数中的helper函数。请参见以下内容:</p>
<pre><code>In [4]: def inbounds_from(values, lower, upper, pos):
...: if pos >= len(values):
...: return 0
...: elif lower <= values[pos] <= upper:
...: return inbounds_from(values, lower, upper, pos+1)
...: elif lower > values[pos]:
...: values[pos] = lower
...: return inbounds_from(values, lower, upper, pos+1) + 1
...: else:
...: values[pos] = upper
...: return inbounds_from(values,lower, upper, pos+1) + 1
...:
...: def inbounds(values, lower, upper):
...: return inbounds_from(values, lower, upper, 0)
...:
In [5]: test = [-3,82,105,86,-10,119,100,70]
In [6]: inbounds(test, 0, 100)
Out[6]: 4
In [7]: test
Out[7]: [0, 82, 100, 86, 0, 100, 100, 70]
</code></pre>
<p>然而,一般来说,在Python中要避免递归。下面是一个Python式的方法,借用了马拉的巧妙的<code>min(max())</code>技巧:</p>
^{pr2}$