我應該編寫代碼,以3種不同的方式顯示collatz猜想,使用遞歸進行分配。如果你對這個想法不熟悉,那麼這個猜想就會說如果你取任何起始值n,如果n是偶數,你可以通過除以n/2得到1的值,或者如果n是奇數,則可以乘3n + 1。我應該以3種方式,前進,後退和迴文方式顯示完整的算法。Collatz猜想回文
例如,在向前的方式值32將顯示:32 16 8 4 2 1
在向後時尚的值32將顯示1 2 4 8 16 32
最後,迴文時尚將顯示32 16 8 4 2 1 2 4 8 16 32
我已經能夠向前和向後完成,但迴文部分正在滑倒我。我所有的努力都顯示了前進的方式,或讓我陷入無限循環。
*重要*這裏是棘手的部分:我不允許聲明任何局部或全局變量來幫助我的問題。我只允許使用Collatz方法的原始參數,循環和遞歸。有沒有人有這個騙子的解決方案?
def Collatz(number , algorithm):
if number == 1:
print number
return
if algorithm == 'F':
if number % 2 == 1:
print number
Collatz((3*number) + 1, algorithm)
if number % 2 == 0:
print number
Collatz((number/2),algorithm)
if algorithm == 'B':
if number % 2 == 1:
Collatz((3*number) + 1, algorithm)
print number
if number % 2 == 0:
Collatz((number/2),algorithm)
print number
**if(algorithm == 'P'):**
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
這可能是強迫人們擁抱一條真正的遞歸路徑.. – Iluvatar
老實說,在這種情況下,不使用局部或全局變量是有道理的。如果你想打印它,你打印這個數字,然後完成剩下的工作。如果你想回退,你可以完成剩下的工作,然後打印號碼。迴文只是做兩個。 – Kytuzian
我看到他們正試圖迫使你現在做... –