2022年 12月 19日

python实现角谷定理

问题:
角谷定理。输入一个自然数,若为偶数,则把它除以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