请输入递归的n值,同时其也是汉诺塔的盘子数目
代码块:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int DataType;
#define MaxSize 100
//递归和非递归函数声明
int fact1(int n);
int fact2(int n);
void hanoi(int n,char a,char b,char c);
int main(){
int f,n;
printf("请输入一个正整数(n<15):");
scanf("%d",&n);
printf("递归实现n的阶乘:");
f=fact1(n);
printf("n!=%4d\n",f);
f=fact2(n);
printf("利用栈非递归实现n的阶乘:");
printf("n!=%4d\n",f);
printf("汉诺塔:\n");
hanoi(n,'a','b','c');
return 1;
}
//递归函数
int fact1(int n){
if(n==1){
return 1;
}else{
return n*fact1(n-1);
}
}
//非递归函数
int fact2(int n){
int s[MaxSize][2],top=-1;
top++;
s[top][0]=n;
s[top][1]=0;
do{
if(s[top][0]==1){
s[top][1]=1;
}
if(s[top][0]>1&&s[top][1]==0){
top++;
s[top][0]=s[top-1][0]-1;
s[top][1]=0;
}
if(s[top][1]!=0){
s[top-1][1]=s[top][1]*s[top-1][0];
top--;
}
}while(top>0);
return s[0][1];
}
//汉诺塔
void hanoi(int n,char a,char b,char c)
{
if(n>0)
{
if(n==1)
{
printf("%c->%c\n",a,c);
}
else
{
hanoi(n-1,a,c,b);
printf("%c->%c\n",a,c);
hanoi(n-1,b,a,c);
}
}
}