原題:
編寫一個名為collatz()的函數,它有一個名為number 的參數。如果參數是偶數,那么collatz()就打印出number // 2,并返回該值。如果number 是奇數,collatz()就打印并返回3 * number + 1。
然后編寫一個程序,讓用戶輸入一個整數,并不斷對這個數調用collatz(),直到函數返回值1(令人驚奇的是,這個序列對于任何整數都有效,利用這個序列,你遲早會得到1!既使數學家也不能確定為什么。你的程序在研究所謂的“Collatz序列”,它有時候被稱為“最簡單的、不可能的數學問題”)。
先來看看wiki上對Collatz 序列的描述
Take any positive integer n. If n is even, divide it by 2 to get n / 2. If n is odd, multiply it by 3 and add 1 to obtain 3n + 1. Repeat the process indefinitely. The conjecture is that no matter what number you start with, you will always eventually reach 1.
也就是說實際上,我們的限制條件需為正整數
答案如下:
#!/usr/bin/env python
# coding=utf-8
import sys
def collatz(number):
if number % 2 == 0:
return number // 2
else:
return 3 * number + 1
if __name__ == '__main__':
number =input('Enter positive number: ')
try:
number = int(number)
if number > 0:
while True:
if number != 1 :
print(collatz(number))
number = collatz(number)
else:
break
else:
print('you need input positive number.')
except:
print('you need input positive number.')
隨便測試幾個數
C:\python\learn07>python collatz.py
Enter positive number: 99
298
149
448
224
112
56
28
14
7
22
11
34
17
52
26
13
40
20
10
5
16
8
4
2
1
C:\python\learn07>python collatz.py
Enter positive number: 1
C:\python\learn07>python collatz.py
Enter positive number: 0
you need input positive number.
C:\python\learn07>python collatz.py
Enter positive number: -8
you need input positive number.
C:\python\learn07>python collatz.py
Enter positive number: 8sd
you need input positive number.