擅长:python、mysql、java
<p>通过使用堆栈,您始终可以将递归函数转换为迭代函数。我会这样做:</p>
<pre><code>def countChain(n):
cache = { 1: 0 }
stack = [n]
while n not in cache:
n_curr = stack.pop()
if n_curr % 2 == 0:
if n_curr / 2 in cache:
cache[n_curr] = 1 + cache[n_curr / 2]
else:
stack.append(n_curr)
stack.append(n_curr / 2)
else:
if (3 * n_curr + 1) / 2 in cache:
cache[n_curr] = 3 + cache[(3 * n_curr + 1) / 2]
else:
stack.append(n_curr)
stack.append((3 * n_curr + 1) / 2)
return cache[n]
</code></pre>