正在载入在线练习界面,本页内容可直接阅读…
AK CSP › NOIP 提高 2015 第一轮真题 › 第 26 题
NOIP 提高 2015 第一轮 第 26 题:汉诺塔递归统计移动次数
题目
```
#include <iostream>
using namespace std;
int fun(int n, int fromPos, int toPos) {
int t, tot;
if (n == 0)
return 0;
for (t = 1; t <= 3; t++)
if (t != fromPos && t != toPos)
break;
tot = 0;
tot += fun(n - 1, fromPos, t);
tot++;
tot += fun(n - 1, t, toPos);
return tot;
}
int main() {
int n;
cin >> n;
cout << fun(n, 1, 3) << endl;
return 0;
}
```
输入:5
输出:_________本小题
请写出程序的输出结果。
答案
31
题解
考点定位
本题考「递归模拟」,对应大纲 4.2.3 递归(难度【4】)。
解题过程
fun(n,from,to):n=0 返回 0;找中转柱 t;递归 fun(n−1,from,t)+1+fun(n−1,t,to)——汉诺塔移动次数 2ⁿ−1:
n=5 ⇒ 2⁵−1 = 31。
答案:31。
易错提醒
① 识别汉诺塔:三次调用中的中转柱选择;② 总移动次数 2ⁿ−1。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号