一、汉诺塔游戏

递归求解汉诺塔问题(递归求解汉诺塔)(1)

法则:每次移动一片,不管在哪根针上,小片必须在大片上面。

玩个游戏:

递归求解汉诺塔问题(递归求解汉诺塔)(2)

递归求解汉诺塔问题(递归求解汉诺塔)(3)

递归求解汉诺塔问题(递归求解汉诺塔)(4)

二、汉诺塔的代码:

x,y,z代表三根针。

递归求解汉诺塔问题(递归求解汉诺塔)(5)

递归求解汉诺塔问题(递归求解汉诺塔)(6)

递归求解汉诺塔问题(递归求解汉诺塔)(7)

递归求解汉诺塔问题(递归求解汉诺塔)(8)

递归求解汉诺塔问题(递归求解汉诺塔)(9)

三、使用递归编写一个十进制转换为二进制的函数(要求采用“取2取余”的方式,结果与调用bin()一样返回字符串形式)

递归求解汉诺塔问题(递归求解汉诺塔)(10)

四、 写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。举例:get_digits(12345) ==> [1, 2, 3, 4, 5]。解题思路:利用除以10取余数的方式,每次调用get_digits(n//10),并将余数存放到列表中即可。要注意的是结束条件设置正确。

递归求解汉诺塔问题(递归求解汉诺塔)(11)

五、用回文求字符串,使用递归的方式来求解。解题思路:利用递归每次索引前后两个字符进行对比,当start > end的时候,也正是首尾下标“碰面”的时候,即作为结束递归的条件。

递归求解汉诺塔问题(递归求解汉诺塔)(12)

六、使用递归编程求解以下问题:

有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

解题思路:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。

递归求解汉诺塔问题(递归求解汉诺塔)(13)

,