汉诺塔DP

题目描述

如果将课本上的汉诺塔问题稍做修改:给定 N 只盘子,3 根柱子,但是允许每次最多移动相邻的 M 只盘子(当然移动盘子的数目也可以小于 M), 最少需要多少次?

输入格式

输入数据仅有一行,包括两个数 N 和 M(0<=M<=N<=8)

输出格式

仅输出一个数,表示需要移动的最少次数
 

#include<iostream>
using namespace std;

int Recursion(int n)
{
if (n == 1)
return 1;
if (n == 2)
return 2;
if (n > 2)
return Recursion(n - 1) + Recursion(n - 2);
}
int main()
{
int n=0;
while (scanf("%d", &n) != EOF)
{
cout << Recursion(n) << endl;
}
return 0;
}

posted @ 2023-04-16 11:02  鳄鱼先生偷吃番茄  阅读(25)  评论(0)    收藏  举报