递推法证明汉诺塔问题

这篇具有很好参考价值的文章主要介绍了递推法证明汉诺塔问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、递推公式

首先给出汉诺塔递推法的公式:f(n)=f(n-1)*2+1
同时我们知道,如果只有一个盘片要移动的话只需移动一次,即f(1)=1为初始条件。
综上递推公式为:汉诺塔公式推导,java,c/c++,经验分享,算法,动态规划

2、证明

假设,现有A,B,C三个柱子可用于存放盘子,并设将n个盘片从A柱移往C柱要使用f(n)次移动。
基于上述假设,我们可以知道要想将n个盘片从A柱移往C柱,等价于先将前n-1个盘有序的叠放在B柱这个辅助柱上,此时移动的次数为移动前n-1个盘的次数,即f(n-1);接着将A柱上最大的一个盘移到C柱,移动次数为一次,即1;最后在将辅助柱B上的n-1个盘片通过A柱来做辅助柱移动到C柱,此时移动次数为f(n-1)。
综上所述将A柱上的n个盘片通过B柱作为辅助柱移动到C柱上的所有次数为f(n)=2*f(n-1)+1。

3、代码

package com.example.algorithms;

/**
 * 采用动态规划算法解决汉诺塔问题
 * @author LuoXianchao
 * @since 2023/3/2 10:59
 */
public class Test07 {
    public static void main(String[] args) {
        int n = 10;//n表示有几个盘片
        //开辟一块空间,这里用n+1个空间,索引为0的没用到,索引为i表示dp存储i片盘的移动次数
        int[] dp = new int[n + 1];
        dp[1] = 1;//设初值
        //i小于n的解全部算出来,最终得到n的解
        for (int i = 2; i <= n; i++;) { //设2为开始求解的问题
            dp[i] = 2 * dp[i - 1] + 1;//递推公式 
        }
        //输出结果
        for (int index = 1; index < dp.length; index++) {
            System.out.println(index + "片盘移动的次数为:" + dp[index]);
        }
    }
}

结果
汉诺塔公式推导,java,c/c++,经验分享,算法,动态规划文章来源地址https://www.toymoban.com/news/detail-590152.html

到了这里,关于递推法证明汉诺塔问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【有营养的算法笔记】基础算法 —— 推导证明前缀和与差分

    👑作者主页:@安 度 因 🏠学习社区:StackFrame 📖专栏链接:有营养的算法笔记 如果无聊的话,就来逛逛 我的博客栈 吧! 🌹 Hello,小伙伴们,好几天没有更新了,今天更了一篇比较“硬核的文章”。 主要内容为前缀和与差分算法的推导证明和代码实现。这篇文章博主还是画

    2024年01月21日
    浏览(39)
  • 图形学、02 推导证明 | 任意一点经过透视投影后 z 坐标相对于之前有什么变化

    齐次坐标知识点: (begin{bmatrix} x \\\\ y \\\\ z \\\\ 1 \\\\end{bmatrix} Rightarrowbegin{bmatrix} nx \\\\ ny \\\\ nz \\\\ n \\\\end{bmatrix}) 两个都表示同一个点 透视投影:先将远截面按一定规则缩放到跟近截面一样大,然后再正交投影 缩放规则: 远截面 缩放后 (z) 不变,缩放过后大小同近截面相同。 截

    2024年02月08日
    浏览(32)
  • 一张图带你看完图论第五章(包含全部考点,含定义、定理、公式、推导证明和所有例题)

    付费大佬可以联系我把你们加入思维导图协作,看更加具体清楚地思维导图/敬礼 5.1 匹配 匹配(边独立集)M是G的不相邻边组成的边子集(无环) 饱和点 v是匹配M中某边的端点,则称v为M饱和点 完美匹配 G中每个顶点均为M饱和点,则M为G的完美匹配 最优匹配 在赋权完全偶图

    2024年02月09日
    浏览(40)
  • 经典递归算法——汉诺塔问题

             相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动

    2024年02月06日
    浏览(28)
  • Python实现 — — 汉诺塔问题

    我们今天来看一个很有意思的实例,叫做汉诺塔问题。 汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大

    2024年02月04日
    浏览(21)
  • 经典算法-----汉诺塔问题

    今天我们学习一个老经典的问题-----汉诺塔问题,可能在学习编程之前我们就听说过这个问题,那这里我们如何去通过编程的方式去解决这么一个问题呢?下面接着看。 问题描述 这里是引用汉诺塔问题源自印度一个古老的传说,印度教的“创造之神”梵天创造世界时做了 3

    2024年02月07日
    浏览(27)
  • 【汉诺塔问题分析】

    汉诺塔问题是一种经典的递归问题,它由法国数学家Huygens在1665年发现,也是一道有趣的数学难题。这道问题的主要目的是将三根柱子上的一堆盘子移动到另一根柱子上,移动过程中每次只能移动一个盘子,并且大盘子不能放在小盘子上面。 下面我们来详细解析这个问题:

    2024年02月16日
    浏览(31)
  • 递归求解汉诺塔问题(超详解)

    这个问题是关于三根柱子和一些圆盘的游戏。 初始时,所有的圆盘按照从大到小的顺序叠放在一根柱子上,目标是将所有圆盘从起始柱子移动到目标柱子上,在移动过程中,要满足以下规则喵: 每次只能移动一个圆盘。 大圆盘不能放在小圆盘上。 只能通过中间柱子作为辅

    2024年02月15日
    浏览(61)
  • 【面试题08.06.汉诺塔问题】

    2024年02月08日
    浏览(20)
  • C++实现汉诺塔问题(递归实例)

    汉诺塔的由来 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。 印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论

    2024年02月07日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包