Python: 学习系列之四:有趣的经典数学问题

系列

递归函数

"""
    递归的算法,必须满足两个条件:
    1. 原问题与新问题有相同的形式
    2. 递归就是一种循环,必须有一个递归出口退出循环
"""

"""
    n! = 1 * 2 * 3 * .... * n = (n-1)! * n 且 1!=1
    即fac(n) = fac(n-1)* n
"""


def fac(n):
    if n == 1:
        return 1
    return fac(n-1) * n


print(fac(5))  # 120


"""
    斐波那切数列
    F0 = 0, F1 = 1, Fn = F(n-1) + F(n-2)(n>=2)
"""
def fib(n):
    if n == 0:
        return 0
    if n == 1:
        return 1
    return fib(n-1) + fib(n-2)


print(fib(6))  # 8 , 0,1,2,3,5

舍罕王赏麦

"""
    印度的舍罕王重赏宰相:一个棋盘,第一格赏一粒麦,第二格赏两粒,三格赏4粒,每一格比前一格多一倍,总共64格
"""

"""
    F1 = 1, F2 = F1* 2, F3 = F2* 2... F64 = F63 * 2
    F = F1 + F2 + F3 + ... + F64
"""


def shehanwang(n):
    t = 1
    s = 1
    for _ in range(2, n+1):
        t *= 2
        s += t

    return s


print(shehanwang(64))  # 18446744073709551615


# 另一种思路, 每一格是2的n-1次方
L = [2 ** i for i in range(0, 64)]
print(sum(L))  # 18446744073709551615

不重复的三位数

"""
    统计0-9这10个数字可以组成多少个不重复的三位数
"""

"""
    根据排列组合,去除0开头的有:A[3,10] -A[2,9] = 10 * 9 * 8 - 9 * 8 =648
"""


def buchongfu():
    counter = 0

    for a in range(1, 10):
        for b in range(0, 10):
            for c in range(0, 10):
                if(c != b and b != a and a != c):
                    counter += 1
    return counter


print(buchongfu())  # 648

角谷猜想

"""
    给出任何自然数,反复进行如下计算
    (1) 若为奇数,则乘以3+1
    (2)若为偶数,则除以2
    最后总可以得到运算结果为1
"""


def jiaogu(n):
    nc = n
    while nc != 1:
        nc = nc * 3+1 if nc % 2 else nc / 2
    print('%d符合角谷猜想' % n)


jiaogu(50)  # 50符合角谷猜想

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值