问题:
角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。
经过如此有限次运算后,总可以得到自然数值1。
求经过多少次可得到自然数1。
如:输入22,
输出 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
STEP=16
# 计数器,保存运行次数
z = 1
# 保存每次运算后的数字
number = []
def corner(n):
# 引用全局变量
global z
# 递归边界
if n == 1:
return z
elif n % 2 == 0:
n = n / 2
number.append(n)
z = z + 1
corner(n)
return z
elif n % 2 != 0:
n = n * 3 + 1
number.append(n)
z = z + 1
corner(n)
return z
# 输入数字
ss = int(input("请输入一个数字:"))
# 调用函数
corner(ss)
# 输出list字典中保存的运算数
print(number)
# 输出运算次数
print(z)