算例一【汉诺塔III (九度OJ 1458)】
-
题目描述
-
解题思路
假设第一根杆上有K个盘,由于转移过程一定要经过第二个杆,所以可以分为以下步骤:
①将第一根杆上的顶部K-1个盘移动至第三根杆 F[K-1]
②此时第一根杆还剩最大的盘,将其移动至第二根杆 1
③将第三根杆上的K-1个盘移动至第一根杆 F[K-1]
④将第二根杆上的最大盘移动至第三根杆 1
⑤将第一根杆上的K-1个盘移动到第三根杆 F[K-1]
所以总的来说,F[K]=3*F[K-1]+2
-
解题代码
#include <stdio.h>
#include <string.h>
Long long F (int num) { //递归函数,返回值较大使用long long类型
if (num == 1) return 2; //当参数为1时直接返回2
else
return 3 * F(num - 1) + 2; //否则递归调用F(num-1)
}
int main () {
int n;
while (scanf ("%d" ,& n) != EOF ) { //输入
printf ( "%lld\n" ,F(n)); //输出