「这是我参与2022首次更文挑战的第14天,活动详情查看:2022首次更文挑战」
递归
-
汉诺塔、谢尔宾斯基三角形、目录树的索引等例子
-
简单递归
- 举例
- 结果
- 举例
-
注意:递归必须要有结束条件,否则程序将崩溃。
-
递归求阶乘
-
方法一:使用循环for
- 举例
- 结果
- 举例
-
方法二:使用递归
- 举例
- 结果
-
注意
- 注意使用if条件语句而不是while循环语句(while是语句结束之后还会进行判断,此时就会出现无限循环)
- num-1和--num使用环境不同,在上面的代码中如果使用--num则结果为0,是因为--num在局部变量存储的位置将num减1,操作栈将第一次的值减1之后压入栈中,使得栈中的值为00123。当使用num-1时栈中的值为01234。
- 举例
-
-
实现递归要满足的两个基本条件
- 调用函数本身
- 设置正确的结束条件
-
慎用递归:通常使用迭代,但在有些地方使用递归更为简便(如汉诺塔)
汉诺塔
-
汉诺塔
-
求解分析
-
简单的分解为三个步骤:
- 将前63个盘子从X移动到Y上
- 将最底下的第64个盘子从X移动到Z上
- 将Y上的63个盘子移动到Z上
-
问题1:将X上的63个盘子借助Z移动到Y上
-
拆解为三个步骤:
- 将前62个盘子从X移动到Z上
- 将最底下的第63个盘子从X移动到Y上
- 将Z上的62个盘子移动到Y上
-
-
问题2:将Y上的63个盘子借助X移动到Z上
-
拆解为三个步骤:
- 将前62个盘子从Y移动到X上
- 将最底下的第63个盘子从Y移动到Z上
- 将X上的62个盘子移动到Z上
-
-
- 代码(注意形式参数和实参)
- 结果
-