我有以下分配信息:
## CollatzRecursion
###
# define your RECURSIVE version of Collatz below this comment so that it runs
# correctly when called from below.
#
# REQUIREMENTS:
# a) The correct sequence must be printed, all the values on one line.
# b) Your Collatz function must use recursion.
# c) Aside from two arguments accepting a positive integer value and the letter
# F, B, or P; your Collatz function MAY NOT use any other internal or external variables.
# d) Your Collatz function may accept only the two arguments described in (c).
# e) If the second argument is 'F', the sequence should b printed in its
# naturally generated order.
# If the second argument is 'B', the sequence should be printed in reverse.
# If the second argument is 'P', then a palindrome of the sequence values should
# be printed (see http://en.wikipedia.org/wiki/Palindrome). In this case
# it doesn't matter if your function prints the first value as 1 or the
# value provided by the user.
###
###
# Do NOT alter Python code below this line
###
m = input( "Enter a positive integer value: " )
displaymode = '' # initialize to anything not F, B, P
while displaymode not in ['F', 'B', 'P'] :
displaymode = raw_input( "Choose a display mode: F=forward, B=backward, P=palindrome: " )
Collatz( m, displaymode )
print
我不确定如何开始这个问题,但是我认为这将涉及将序列中的值添加到数组中,以便可以向后打印并作为palindrome打印。我只想一些指示/建议,这会让我开始。谢谢!
否,您不能使用列表(或任何其他类型的数组),因为指令告诉您"您的Collatz函数可能不会使用任何其他内部或外部变量"。该限制也是一个提示:您需要在递归期间适当的时间打印Collatz序列值。
很难在不为您编写代码的情况下提供更多提示,我知道您不想要那个。但是,这是一个版本,以自然生成的顺序打印序列,并且考虑了递归的工作方式,您应该能够弄清楚如何修改它,以便以相反的顺序打印序列。一旦完成,很容易就可以做到这一点。
def collatz(m):
print m,
if m > 1:
collatz(3 * m + 1 if m % 2 else m // 2)
# test
collatz(7)
print
输出
7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
P.S。您的老师应该教您python 3,因为Python 2将在2020年之后不再得到支持。