汉诺塔问题:现有A、B、C三根柱子,其中A柱上有n个盘子,现在要用最少的步骤将A柱上的盘子全部挪到C柱上。
规则:
- 一次只能移动一个盘子。
- 大盘不能放在小盘之上。
于是可以得到这样的思路:
可知移动第n个盘子到C柱共需 f(n-1)*2+1 步。即 f(n)=f(n-1)*2+1(n>1)。
于是可以这样定义函数:
int Hanoi(int n)
{
if (n > 1)
return Hanoi(n - 1) * 2 + 1;
else
return 1;
}
汉诺塔问题:现有A、B、C三根柱子,其中A柱上有n个盘子,现在要用最少的步骤将A柱上的盘子全部挪到C柱上。
规则:
于是可以得到这样的思路:
可知移动第n个盘子到C柱共需 f(n-1)*2+1 步。即 f(n)=f(n-1)*2+1(n>1)。
于是可以这样定义函数:
int Hanoi(int n)
{
if (n > 1)
return Hanoi(n - 1) * 2 + 1;
else
return 1;
}