递归问题解决汉诺塔(C)

#include<stdio.h>
void hanoii(char A,char B,char C,int n);
void main()
{
	
	int a;
	printf("please input the number of the hanoi:\n");
	scanf("%d", &a);
	hanoi('A','B','C',a);
}


void hanoii(char A,char B,char C,int n)
{
    
	if(n == 1)
	{
		
		printf("from %c to %c\n",A,C);
	}


	else
	{
		hanoi(A,C,B,n-1);
		printf("from %c to %c\n",A,C);
		hanoii(B,A,C,n-1);
	}
    
}

首先让我们来看一看 c语言的实现方法

 我们可以把所有情况都看做一种情况 即看作两层汉诺塔。

首先我们来定义一个汉诺塔函数来处理汉诺塔 ,内部的形参为char A, char B, char C 分别代表三个柱子 int n 代表层数。

一、当塔只有一层的时候 我们便可以直接把盘子 从A移动到目标盘C   对应代码  if(n == 1) printf(“from %c to %c\n”,A,C);


二、否则都可以看作是两层塔

    把函数名看作搬运工 
    则第一句表示  把第N-1座塔 <span style="white-space:pre">	</span>A->B
      第二句表示  把第N座塔     A->C
      最后一句    把第N-1座塔 <span style="white-space:pre">	</span>B->C

    原文作者: 汉诺塔问题
    原文地址: https://blog.csdn.net/lijiahao1995/article/details/45085189
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞