<递归>汉诺塔 | 斐波那契数列 | 阶乘 (附python实现源码)

简介: 经典递归汉诺塔问题背景故事传说印度某间寺院有三根柱子,上串64个金盘。寺院里的僧侣依照一个古老的预言,以上述规则移动这些盘子;预言说当这些盘子移动完毕,世界就会灭亡。
经典递归

汉诺塔问题

背景故事

传说印度某间寺院有三根柱子,上串64个金盘。寺院里的僧侣依照一个古老的预言,以上述规则移动这些盘子;预言说当这些盘子移动完毕,世界就会灭亡。这个传说叫做梵天寺之塔问题(Tower of Brahma puzzle)。但不知道是卢卡斯自创的这个传说,还是他受他人启发。
若传说属实,僧侣们需要 (2的64次方 − 1) 步才能完成这个任务;若他们每秒可完成一个盘子的移动,就需要5845亿年才能完成。整个宇宙现在也不过137亿年。

游戏规则:

1.借助B柱子将A柱子上面的圆盘移动到C柱子
2.小圆盘上不能放大圆盘
3.在三根柱子之间一次只能移动一个圆盘

源码(python实现):

def hanoi(n, a, buffer, c):
    if(n == 1):
        print(a,"--->",c)
        return
    hanoi(n-1, a, c, buffer)
    hanoi(1, a, buffer, c)
    hanoi(n-1, buffer, a, c)

def main():
    n = int(input("请输入汉诺塔铜盘的个数:"))
    hanoi(n, "a", "b", "c")

if __name__ == "__main__":
    main()

求斐波那契数列

背景故事:

在西方,最先研究这个数列的人是比萨的列奥那多(意大利人斐波那契Leonardo Fibonacci),他描述兔子生长的数目时用上了这数列:

  • 第一个月初有一对刚诞生的兔子
  • 第二个月之后(第三个月初)它们可以生育
  • 每月每对可生育的兔子会诞生下一对新兔子
  • 兔子永不死去

假设在n月有兔子总共a对,n+1月总共有b对。在n+2月必定总共有a+b对:因为在n+2月的时候,前一月(n+1月)的b对兔子可以存留至第n+2月(在当月属于新诞生的兔子尚不能生育)。而新生育出的兔子对数等于所有在n月就已存在的a对.

游戏规则:

费波那契数列由0和1开始,之后的费波那契系数就是由之前的两数相加而得出

源码(python实现):

def Fibonacci(num):
    if num == 1 or num == 2:
        return 1
    elif num == 0:
        return 0
    else:
        return Fibonacci(num-1) + Fibonacci(num - 2)



def main():
    num = int(input("请输入斐波那契的位数:"))
    result = Fibonacci(num)
    print("第%d位斐波那契数的值为%d"%(num, result))


if __name__ == "__main__":
    main()



求阶乘

一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1

源码(python实现):

def factorial(num):
    if num == 1 or num == 0:
        return 1
    else:
        return num *factorial(num-1)



def main():
    num = int(input("请输入需要求阶乘的整数:"))
    result = factorial(num)
    print("%d的阶乘为%d"%(num, result))
    pass


if __name__ == "__main__":
    main()

目录
相关文章
|
6月前
|
Python
用python进行视频剪辑源码
这篇文章提供了一个使用Python进行视频剪辑的源码示例,通过结合moviepy和pydub库来实现视频的区间切割和音频合并。
144 2
|
4月前
|
JSON 开发工具 git
基于Python和pygame的植物大战僵尸游戏设计源码
本项目是基于Python和pygame开发的植物大战僵尸游戏,包含125个文件,如PNG图像、Python源码等,提供丰富的游戏开发学习素材。游戏设计源码可从提供的链接下载。关键词:Python游戏开发、pygame、植物大战僵尸、源码分享。
|
4月前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
98 2
|
5月前
|
自然语言处理 Java 编译器
为什么要看 Python 源码?它的结构长什么样子?
为什么要看 Python 源码?它的结构长什么样子?
96 2
|
5月前
|
Java 程序员 C++
【Python】链式、嵌套调用、递归、函数栈帧、参数默认值和关键字参数
【Python】链式、嵌套调用、递归、函数栈帧、参数默认值和关键字参数
59 0
【Python】链式、嵌套调用、递归、函数栈帧、参数默认值和关键字参数
|
5月前
|
Python
源码解密 Python 的 Event
源码解密 Python 的 Event
67 1
|
5月前
|
Python
在Python中实现斐波那契数列(Fibonacci sequence)的4中方法
在Python中实现斐波那契数列(Fibonacci sequence)的4中方法
1685 0
|
5月前
|
数据采集 前端开发 Python
Python pygame 实现游戏 彩色 五子棋 详细注释 附源码 单机版
Python pygame 实现游戏 彩色 五子棋 详细注释 附源码 单机版
132 0
|
7月前
|
算法 Python
python函数递归和生成器
python函数递归和生成器
|
7月前
|
Ubuntu Linux 数据安全/隐私保护
使用Cython库包对python的py文件(源码)进行加密,把python的.py文件生成.so文件并调用
本文介绍了在Linux系统(Ubuntu 18.04)下将Python源代码(`.py文件`)加密为`.so文件`的方法。首先安装必要的工具如`python3-dev`、`gcc`和`Cython`。然后通过`setup.py`脚本使用Cython将`.py文件`转化为`.so文件`,从而实现源代码的加密保护。文中详细描述了从编写源代码到生成及调用`.so文件`的具体步骤。此方法相较于转化为`.pyc文件`提供了更高的安全性。
428 2