一、问题

C语言 汉诺塔_主函数

有三个柱子,将第一个柱子上n个块块挪动到另一个柱子上 ,每次挪动一个块块,要求小块块必须在大块块上面,写一个程序计算一共要走几步。

二、分析

设3个柱子从左到右边分别为a,b,c柱。将块块从a移动到c柱子

当n=1时,只需要挪动1步

当n>1时,需要先将n-1个块块挪动到b柱子,然后将第n个块块挪动到c柱子,然后再将n-1个块块从b挪到c块。

那么n个块块的步骤就等于,1加上2倍的n-1个块块的步骤。


n-1个块块就等同于1加上2倍的n-2个块块的步骤

如此套娃,直到n-x=1,这时返回值1,就开始了芜湖芜湖返回,最后返回n个块块所需要的步骤

三、写法

那么根据函数递归法,咱们可以有一下结果

设这个函数名就叫hannuota吧

int hannuota(int n)
{
if(n==1)
return 1;
else
return 1+2*hannuota(n-1);
}

那么这个函数返回的值就是n个块块的步骤数目啦,这时候咱们再写个主函数,用m存放返回值

int main()
{
int m,n;
printf("请输入块块数目n=");
scanf("%d",&n);
m=hannuota(n);
printf("一共需要%d步呢",m);
return 0;
}

这样汉诺塔问题就解决啦芜湖,如果你有更好的想法请分享出来吧,你也可以尝试用循环写一下,有手就行。