我正在解决Euler项目的问题14,我编写了2个程序,其中一个已优化,而另一个未优化。我什至导入了时间模块来计算所用的时间,但是它不能正常工作。在未优化的代码中可以正常工作:
import time
start = time.time()
def collatz(n):
chain=1
while(n>1):
chain+=1
if(n%2==0):
n/=2
else:
n = 3*n+1
return chain
maxChain = 0
num=0
counter = 10**6
while(counter>13):
coll = collatz(counter)
if(coll > maxChain):
maxChain = coll
num = counter
counter-=1
end = time.time()
print("Time taken:",end-start)
print(start+', '+ end)
输出为:
Time taken: 47.83728861808777
1591290440.8452923, 1591290488.682581
但是在我的其他代码中:
import time
start = time.time()
dict = {n:0 for n in range(1,10**6)}
dict[1], dict[2] = 1,2
for i in range(3,10**6):
counter = 0
start = i
while(i > 1):
#Have we already encountered this sequence?
if(i < start):
dict[start] = counter + dict[i]
break
if(i%2==0):
i/=2
else:
i = 3*i+1
counter += 1
end = time.time()
print('Time taken:',end-start)
print(start+', '+end)
输出为:
Time taken: 1590290651.4527032
999999, 1591290650.4527032
The start time in the second program is 999999 while the end time is fine. this problem doesn't occur in the first program, I don't know why this is happening?
答案 0 :(得分:2)
翻译自评论:
您可以在第二版代码中看到阴影/重复使用变量start
,并将其用作计数器。因此,输出中的999999
和奇怪的结果。
将其重命名为其他名称即可==