题目
问题1,2
问题1,2体现在代码1中
#include<stdio.h>
int num=0;
void HN(int n,char a,char b,char c)
{
if(n==1)
{
printf("将盘子%d由%c移动到%c\n",n,a,c);
}
else
{
HN(n-1,a,c,b);
printf("将盘子%d由%c移动到%c\n",n,a,c);
HN(n-1,b,a,c);
}
}
int F(int n)
{
int i=0,m=1;
for(i;i<n;i++)
{
m=m*2;
}
return m;
}
int NUM(int n)
{
if(n==1)
printf("最少移动次数:1\n");
else
printf("最少移动次数:%d\n",(1-F(n))*(-1));
}
int main()
{
int n=0,num=0;
printf("a柱子上要移动的盘子个数:\n");
scanf("%d",&n);
num=NUM(n);
HN(n,'a','b','c');
return 0;
}
问题3
代码时间复杂度为O(2n)
问题4
F(n)=2n-1
问题5
数学归纳法可证明,在任何情况下都不会出现同色的盘子放在一起的情况。
讲解