以下是我的指示:
考虑以下过程:从一些正整数开始。如果数字是奇数,则将其乘以3并加1.如果是偶数,则将其除以2.对于每个曾尝试过的数字,重复此过程最终会得到数字1.例如,从6开始我们得到序列6,3,10,5,16,8,4,2,1。这是一个长度为9的序列。
编写一个带有参数n的函数collatz,并返回生成的序列长度至少为n的第一个整数。
这是我目前的代码:
def collatz( n ):
seq = []
seq.append( n )
while n > 1:
if n % 2 != 0:
n = int( n * 3 ) + 1
seq.append( n )
else:
n = int( n / 2 )
seq.append( n )
if len( seq ) < seq[ 0 ]:
return len( seq )
else:
return seq[ 1 ]
我的当前代码适用于10输入正确输出7,输入6输出3正确输出,但输入3输出10时应输出3。
我对这个问题感到非常困惑,无法解决它甚至问的问题。任何帮助是极大的赞赏!谢谢!
答案 0 :(得分:2)
我相信要求你做的是:
编写一个带有数字n的函数collatz,并返回生成的序列长于n的最小整数。
一些示例输出:
>>>colatz(1)
1
>>>colatz(2)
2
>>>colatz(3)
3
>>>colatz(4)
3
>>>colatz(9)
6
您现在拥有的功能似乎是正确生成给定数字的序列。在那之后,我不认为你回来的东西会在回答这个问题方面取得任何进展。
答案 1 :(得分:2)
&#34;写一个函数collatz,它接受一个参数n并返回生成的序列长度至少为n的第一个整数&#34;
因此,您将编写一个函数来查找至少长度为n 且的collatz序列,并返回它开头的整数。不是以n。
开头的collatz序列