首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Collatz序列(死循环)

Collatz序列(死循环)
EN

Stack Overflow用户
提问于 2019-08-27 16:58:45
回答 2查看 127关注 0票数 0

首先,我知道这是一个非常容易被问到的问题。编写一个名为collatz()的函数,该函数有一个名为number的参数。如果number为偶数,则collatz()应输出number // 2并返回此值。如果number是奇数,那么collatz()应该打印并返回3* number + 1。然后编写一个程序,让用户输入一个整数,并对该数字不断调用collatz(),直到函数返回值1。

代码语言:javascript
复制
def collatz(number):

  return [number //2 if number %2 == 0 else 3*number + 1]


number = int(input('Number - \n'))

while number != 1:

  result = collatz(number)
  print(result)

在我的程序中,我不明白的是,为什么它要做第一个操作,却卡在第一个数字上。例如,如果我输入12,它返回6,但由于永远打印6而陷入while循环。我想知道这个程序到底出了什么问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-27 17:02:11

您的问题是您正在丢弃result。您可能指的是number = collatz(number)[0] (出于某种原因,您在这里使用列表)。

由于您没有在循环中修改number,因此条件的计算结果总是相同的,collatz的输入也总是相同的。

票数 1
EN

Stack Overflow用户

发布于 2019-08-27 17:13:59

问题在于,您并没有将新元素添加到列表中,而是用当前结果替换了列表。我已经修改了您的代码,以便使用序列中的元素填充列表:

代码语言:javascript
复制
n = int(input("n="))
l = []
while n != 1:
  l.append(n);
  n = n // 2 if n % 2 == 0 else n * 3 + 1
print(l)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57671078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档