2016-12-03 24 views
0

我有一个分配的以下信息:递归在Collat​​z随着各种显示模式

## 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 

我不确定我怎么能启动这个问题,但我想这将涉及序列中添加值一个数组,以便它们可以向后打印并作为回文。我只想给我一些指点/建议,让我开始。谢谢!

回答

0

不,你不能用一个列表(或任何其他类型的数组),因为指示告诉你,“你在Collat​​z功能可能无法使用其他任何内部或外部变量”。该限制也是一个提示:您需要在递归期间的适当时间打印Collat​​z序列值。

很难给出进一步的提示,而无需编写代码对你,我知道你不希望出现这种情况。但是这里有一个版本以自然生成的顺序打印序列,并且关于递归如何工作的一些想法,您应该能够弄清楚如何修改它以便序列以相反的顺序打印。一旦你完成了它,很容易让它做回文。

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年

后不再支持