• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

浅析python递归函数和河内塔问题

python 搞代码 4年前 (2022-01-08) 25次浏览 已收录 0个评论

这篇文章主要介绍了python递归函数和河内塔问题,非常不错,具有参考借鉴价值,需要的朋友可以参考下

关于递归函数:

  函数内部调用自身的函数。

以n阶乘为例:

  f(n) = n ! = 1 x 2 x 3 x 4 x…x(n-1)x(n) = n x (n-1) !

 def factorial(n): if n==1: return 1 return n * f(n-1)

//调用过程如下:

 >>f(5) >>5 * f(4) >>5 * 4 * f(3) >>5 * 4 * 3 * f(2) >>5 * 4 * 3 * 2 * f(1) >>5 * 4 * 3 * 2 * 1 >>120

从上面的例子可以直观得看到递归函数在不断的调用自己的函数,直到n==1(函数出口)。

关于河内塔:

规则:

  1. 三根柱子,A,B, C

  2. A 柱子上的盘子从小到大 排列,最上面的是最小的,最下面的是最大的。

  3. 将A上的盘子移动到C上,移动过程中始终保持,最大的在下面,最小的在上面。

假设 A 柱子上有一个盘子,可以直接从A移动到C完成:

  A –> C

假设 A 柱子上有两个盘子,需要借助B,移动到C:

A –> B

A –> C

B –> C

将A 最上面的盘(2-1)移动到B,然后将A中剩下一块盘移动到C,最后将B中的盘移动到C

假设 A 柱子上有三个盘子,需要借助B移动A 上面的两个盘,然后将A剩下最大的盘移动到C,最后将B中的盘移动到C。

A –> C

A –> B

C –> B  //这三步将A上前两个盘子移动到B

A –> C //这一步将A上最大的盘子移动到C

B –> A

B –> C

A –> C //后面这三步将B上的盘子移动到C

原理是将 A 上的(n-1) 块盘移动到B,然后A中剩下的,也是最大的一块盘移动到C,最后将B上(n-1)块盘移动到C。

 def Hanoi(n , a, b, c): if n==1: print (" Hanoi Tower move", a, "-->", c) return Hanoi(n-1, a, c, b) Hanoi(1, a, b, c) Hanoi(n-1, b, a, c) print (" When there is 1 ring on A") Hanoi(1, 'A'<b style="color:transparent">来源gao@!dai!ma.com搞$$代^@码网</b>, 'B', 'C') print (" When there are 2 rings on A") Hanoi(2, 'A', 'B', 'C') print (" When there are 3 rings on A") Hanoi(3, 'A', 'B', 'C') print(" When there are 4 rings on A") Hanoi(4, 'A', 'B', 'C')

以上就是浅析python递归函数和河内塔问题的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:浅析python递归函数和河内塔问题

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址