我是一名全新的编程研究生,遇到了一些麻烦。我正在解决一个教科书问题,该问题要我取一个正整数并打印该数字的 Collatz 序列。
while num !=1:
print(num)
if num%2==0:
num = num//2
else:
num = 3*num+1
print(1)
现在,此代码有效。我得到了数学逻辑。但是有些部分我不明白。
首先是 print(num),这样做是为了让代码打印输入的数字,因为那是序列的开始。但是,将其置于循环前端的逻辑/解释是什么?
其次,对于 num = num//2 和 num = 3*num+1,为什么代码运行只需要这些?最后,我们的目标是打印整个序列,直到输入变为 1。我认为您需要在顶部设置一个累加器。即 lst = [] 将每个值附加到该列表中,然后返回列表。为什么只是重新标记它们 num = 工作?每次迭代时,是否不会删除先前的值,因为它没有存储在任何地方?
最后,为什么我们不需要以 return 结束循环?它怎么知道打印整个数字序列?它以 print(1) 结束,因为每个输入都需要以它结束,并且它在 1 之前终止。但是,我没有调用该函数(它是我这边的一个函数,而不仅仅是一个 while 循环)来采取行动。它只是……做到了。
如果这有点令人困惑,我很抱歉,但我正在尝试理解正确的代码答案。我大部分时间都在做累加器之类的东西,所以我不确定为什么不需要累加器,num = 做了什么,以及如何用 print(1) 结束它并出现整个序列。
缥缈止盈
郎朗坤
相关分类