//单色汉诺塔
void hanoi(int n, char A, char B, char C)
{
if(n == 1)
printf("move %d from %c to %c\n",n,A,C);//步骤2:将A中最后一个盘子从A直接移至C
else
{
hanoi(n-1,A,C,B);//步骤1:将A中最上面n-1个盘子从A通过C移至B
printf("move %d from %c to %c\n",n,A,C);//步骤2:将A中最后一个盘子从A直接移至C
hanoi(n-1,B,A,C);//步骤3:将B中n-1个盘子从B通过A移至C
}
// if(n >=1 )
// {
// hanoi(n-1,A,C,B);
// printf("move %d from %c to %c\n",n,A,C);
// hanoi(n-1,B,A,C);
// }
}
void main()
{
//盘子个数的奇偶性会影响首次移动盘子的方向
hanoi(3, 'A', 'B', 'C');
}
f(1) = 1, (n=1)
f(n) = 2*f(n-1) + 1, (n>1)
f(n) + 1 = 2(f(n-1) + 1)
f(n) = 2^n -1, (n>0)