河内塔递归问题(具体数学)
首先我们先来看一道精巧的智力题,它是由法国数学家于1883年发明的,给定一个由8个圆盘组成的塔,这些圆盘按照大小递减的方式套在三根桩柱的一根上
如图:
问题来了,规定:每次只能挪动一个圆盘,且较大的圆盘在移动过程中不能放在较小的圆盘上,目的:将整个塔移动到另一根柱子
上。
首先可以先思考一下最好的解法是什么,即要完成移动所需要做的最基本的操作:
1.简化问题
不妨设想一下简单的情况:如果只有3个盘子,那么移动立即就变得十分
明朗,
将上面两个圆盘分别移到一个柱子上,需要三步,
再将最后一个圆盘移到空的柱子上,需要一步,最后重复开始的方法将最开始叠起来的圆盘移到第三个圆盘上,如此便形成了一种行为规律,
即:假设有n个盘子,那么全部移开就需要Tn次将除开最下面的盘子全部移开需要Tn-1次,移动最下面的盘子总共需要1次所以得出:
Tn=2Tn-1+1
有兴趣可以用程序来实现一下这个递归的算法,哪怕不会网上相关代码也很多,就不列举了,不过要说一说他的归纳运算,这样对以后写这方面的编程问题我感觉还是比较有帮助的,
在两边同时加1便可以得出
T0+1=1
Tn+1 = 2Tn-1+2
假设Tn-1+1=U0
则可以用归纳法: