【发布时间】:2021-04-15 09:39:36
【问题描述】:
我正在尝试计算 collatz_chain() 函数被递归调用的次数。特别是,下面的代码似乎在最后(在递归调用之外)将 count 变量设置为 1,即使它在递归函数内部正确递增。
def collatz_longest_chain(limit):
iter = 1
while(iter < limit):
count = 0
_next_num, count = collatz_chain(iter, count)
iter += 1
print('----')
return count
def collatz_chain(n, count):
if n == 1:
count += 1
print("n=1" + " count: " + str(count) + " | inside n == 1")
return 1, count
elif n % 2 == 0:
count += 1
print("n: " + str(n) + " count: " + str(count) + " | inside n % 2 == 0")
return collatz_chain(n/2, count), count
else:
count += 1
print("n: " + str(n) + " count: " + str(count) + " | inside 3*n + 1")
return collatz_chain(3*n + 1, count), count
print(collatz_longest_chain(10))
输出是:
...
n: 9 count: 1 | inside 3*n + 1
n: 28 count: 2 | inside n % 2 == 0
n: 14.0 count: 3 | inside n % 2 == 0
n: 7.0 count: 4 | inside 3*n + 1
n: 22.0 count: 5 | inside n % 2 == 0
n: 11.0 count: 6 | inside 3*n + 1
n: 34.0 count: 7 | inside n % 2 == 0
n: 17.0 count: 8 | inside 3*n + 1
n: 52.0 count: 9 | inside n % 2 == 0
n: 26.0 count: 10 | inside n % 2 == 0
n: 13.0 count: 11 | inside 3*n + 1
n: 40.0 count: 12 | inside n % 2 == 0
n: 20.0 count: 13 | inside n % 2 == 0
n: 10.0 count: 14 | inside n % 2 == 0
n: 5.0 count: 15 | inside 3*n + 1
n: 16.0 count: 16 | inside n % 2 == 0
n: 8.0 count: 17 | inside n % 2 == 0
n: 4.0 count: 18 | inside n % 2 == 0
n: 2.0 count: 19 | inside n % 2 == 0
n=1 count: 20 | inside n == 1
----
1
如何从递归调用中传递正确的计数变量值,以便输出为:
...
n=1 count: 20 | inside n == 1
----
20
【问题讨论】:
-
你能解释一下你想在这里做什么吗?
-
@MaxYarmolinsky - 请参阅下面马克的回答。
标签: python python-3.x algorithm recursion