一、求一个整数的阶乘:

1、常用的迭代方法写法:

def jc(n):result = nfor i in range(1, n):result *= ireturn resultnu = int(input("输入一个整数:"))
result1 = jc(nu)
print("%d的阶乘是%d" % (nu, result1))

 2、使用用递归的方法:

def fa(n):if n == 1:return 1else:return  n*fa(n-1)'''如输入的是5则执行过程:fa(5) = 5*fa(4)fa(4) = 4*fa(3)fa(3) = 3*fa(2)fa(2) = 2*fa(1)fa(1) = 1     '''num = int(input("输入一个整数:"))
result2 = fa(num)
print("%d的阶乘是%d"%(num,result2))

执行效果:

二、求斐波那契数列的第几项的值:

用数学函数形式表示斐波那契数列:

1、常用的迭代方法写法:

def fb(n):n1 = 1n2 = 1n3 = 1if n < 1:print("重新输入大于等于1的数")return -1while (n - 2) > 0:n3 = n2 + n1n1 = n2n2 = n3n -= 1return n3num = int(input("输入斐波那契数列的第几项:"))
result = fb(num)
if result != -1:print("第%d项的斐波那契值为%d" % (num, result))

 2、使用用递归的方法:

def fb(n):if n < 1:print("重新输入大于等于1的数")return -1if n == 1 or n == 2:return 1else:return fb(n - 1) + fb(n - 2)num = int(input("输入斐波那契数列的第几项:"))
result = fb(num)
if result != -1:print("第%d项的斐波那契值为%d" % (num, result))

执行效果:

三、用递归算法实现汉诺塔的解法:

汉诺塔游戏就是第一个柱子的圆盘通过中间柱子媒介和规律移动到第三个柱子且盘子上下顺序与第一个柱子开始的位置一样。

def hanota(n, x, y, z):  # 参数n为有多少个盘子,设置参数xyz为串盘子的三个柱子if n == 1:print(x, "移动到", z)else:hanota(n - 1, x, z, y)  # 将前n-1个盘子从a移动到b上print(x, "移动到", z)  # 将最底下的最后一个盘子从a移动到c上hanota(n - 1, y, x, z)  # 将b上的n-1个盘子c上n = int(input("请输入汉诺塔盘子的层数:"))
hanota(n, "x", "y", "z")

执行效果:

*总结:

1、把数学的算式用代码实现

2、在有些编程中使用递归会比一般使用迭代会便捷整洁一些,但是如果没有使用好那么用递归写出的程序会出很大的问题

3、递归采用的是分治思想

4、递归的执行效率要比迭代慢许多 如果要计算较大的值时需等计算机计算一些时间

python 利用递归算法来完成计算乘阶、斐波那契数列、汉诺塔相关推荐

  1. 递归算法小结(数的阶乘、斐波那契和汉诺塔问题)

    递归是一项重要的编程技术,它让函数可以从函数体内部调用自身.递归通常把一个大型复杂的问题层层简化为一个,与原问题相似的规模较小的问题来求解,使用递归策略只需少量的程序就可描述出解题过程所需要的多次重复 ...

  2. 数据结构与算法—递归算法(从阶乘、斐波那契到汉诺塔的递归图解)

    目录 递归介绍 递归求阶乘 递归求斐波那契 递归解决汉诺塔 总结 递归介绍 递归:就是函数自己调用自己. 子问题须与原始问题为同样的事,或者更为简单: 递归通常可以简单的处理子问题,但是不一定是最好的 ...

  3. labview求n阶乘的和_递归算法(从阶乘、斐波那契到汉诺塔的递归图解)

    递归介绍 递归:就是函数自己调用自己. 子问题须与原始问题为同样的事,或者更为简单: 递归通常可以简单的处理子问题,但是不一定是最好的. 对于递归要分清以下概念: 自己调用自己 递归通常不在意具体操作 ...

  4. 西工大NOJ数据结构理论——010.k阶斐波那契数列(严3.32)

    k阶斐波那契序列定义:第k和k+1项为1,前k - 1项为0,从k项之后每一项都是前k项的和 k=2时,斐波那契序列为:0,1,1,2,3,5,8,13... k=3时,斐波那契序列为:0,0,1,1 ...

  5. python多种计算阶乘和斐波那契数列的六脉神剑

    目录 前言 一.求阶乘 1.第一种方法 2.第二种方法 3.第三种方法 4.第四种方法 5.第五种方法 6.第六种方法 二.斐波那契数列 1.第一种方法 2.第二种方法 3.第三种方法 前言 最近在p ...

  6. python编写递归函数和非递归函数、输出斐波那契数列_python 入门之斐波那契数列递归表达式算法和非递归算法...

    题目: 斐波那契数列是一组有规律的数列:1,1,2,3,5,8,13,--..,那么我们怎么用python 来完成此算法,并求出第200位的值是多少 1.python 递归表达式实现: def fib ...

  7. php猴子吃桃子问题n天,『PHP学习笔记』系列四:利用函数递归调用思想解决【斐波那契数列】问题和【猴子吃桃问题】问题...

    什么是函数递归思想? 递归思想:把一个相对复杂的问题,转化为一个与原问题相似的,且规模较小的问题来求解. 递归方法只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量. 但在 ...

  8. 萌新的Python练习实例100例(六)斐波那契数列

    题目: 用Python写出斐波那契数列,并取出第10位数 分析: 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibona ...

  9. 递归优化为递推:数组/临时变量-计算兔子(斐波那契数列)

    题目 有一对兔子,从出生后第3个月起每个月都生一对兔子,一对小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月(n<=50)的兔子总数为多少对? 题解 多次递归 /* 找规律: ...

最新文章

  1. CF359D:Pair of Numbers(数论)
  2. java 网络编程UDP
  3. SysTick定时器的一个简单应用
  4. 入职体检——项目列表(12项)
  5. Linux——网络地址临时配置(详细步骤+问题解决)
  6. SpringBoot 2.1.5(38)---热部署(devtools)配置操作
  7. Android 系统性能优化(40)---Android LowMemoryKiller原理分析
  8. php网站代码报告,使用Checkstyle报告(来自CodeSniffer)可视化PHP代码
  9. Java实现图片无损任意角度旋转
  10. Linux 私房菜 笔记(完结)
  11. nexus3作为docker私服的使用
  12. linux ssh pem 登陆,Linux 生成pem文件 用于免密登录
  13. 字符串与Unicode编码相关转换
  14. python歌词图表分析_Python可视化图分析毛不易的《入海》,看看听歌的人都在想些什么...
  15. 2015Astar百度之星初赛 1005 序列变化
  16. Java=微信支付详解与日志记录详解
  17. 百度AI身份证识别接口,iOS上传base64图片报错216201问题解决办法总结
  18. VAE with a VampPrior
  19. 修改谷歌和火狐浏览器滚动条的样式
  20. 机器人速度与车轮速度的转换

热门文章

  1. 【文本工具】使用文本排版大师(TxtEdit/TEditer)在记事本文件中绘制表格。
  2. 使用文本排版大师(TxtEdit/TEditer)在记事本文件中绘制表格。
  3. 我校全力开展抗洪救灾工作
  4. 【动态规划】钢条切割问题
  5. 经典SQL语句大全-【转载自】博客园,作者博客:YuBinfeng's Technology Blog
  6. 10寸、10.1寸、10.4寸液晶屏解决方案
  7. 呵呵,海阔天空QQ群里的歪诗
  8. Java使用aspose生成简历
  9. Java经典算法四十例编程详解+程序实例
  10. Echo,Linux上最忧伤的命令(故事)