问题:
角谷定理。输入一个自然数,若为偶数,则把它除以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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34