编写一个名为collatz()的函数,它有一个名为number 的参数。如果参数是偶数,那么collatz()就打印出number// 2,并返回该值。如果number 是奇数,collatz()就打印并返回3 * number + 1。然后编写一个程序,让用户输入一个正整数,并不断对这个数调用collatz(),直到函数返回值1
import sys
def collatz(number):
print(number)
if number == 1:
sys.exit() #结果是1直接退出
elif number <= 0:
print("输入有误")
elif number % 2 == 1:
res = number * 3 + 1
collatz(res)
else:
res = number // 2
collatz(res)
if __name__ == '__main__':
getnumber = input('Enter number: ')
try:
getnumber = int(getnumber) #input()的返回值是字符串,所以需要转化为int
collatz(getnumber)
except ValueError as verror:
print('ValueError: You need input digital.')
在解改题时还遇见了 “maximum recursion depth exceeded while calling a Python object”这个问题,就是python当中的最大递归深度错误,查看最大递归深度如下:
import sys
x = sys.getrecursionlimit()
print(x)
解决方案是我们可以修改最大递归深度,如下:
import sys # 导入sys模块
sys.setrecursionlimit(5000) # 将默认的递归深度修改为5000