C语言笔记-递归函数
递归函数可以理解为子函数本身调用自己,调用必须有结束条件和起始条件。通过下边这个例子来给大家分析一下。
河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时 北越的首都,即现在的胡志明市;1883年法国数学家 Edouard Lucas曾提及这个故事,据说创世 纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64 个由上至下依由小至大排列的金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第三根 石棒,且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,则当盘子全数搬 运完毕之时,此塔将毁损,而也就是世界末日来临之时。
程序如下:
分析图:
当我们输入n+3时,
程序第一次调用honai子函数,此时n=3,参数是ABC,对应的abc;
执行到else后
第二次调honai用函数此时n=2,参数为ABC对应的是acb,
条件仍不满足,继续
第三次调用honai函数,此时n=1,参数ABC对应的是abc,满足条件,第一次打印出a》c
然后跳出子程序,回到n=2时的函数程序,此时参数为acb,打印AC就是a》b,
然后第四次调用honai函数,此时n=1,参数ABC对应的是cab,满足条件,打印c》b
然后跳出程序,n=2时第一次调用的函数结束,回到n=3,此时参数ABC为abc,打印a》c
第五次调用honai函数,此时n=2,参数ABC对应的是bac,条件仍不满足,继续
第六次调用honai函数,此时n=1,参数ABC对应的是bca,满足条件,第一次打印出b》a
然后跳出子程序,回到第五次调用n=2时的函数程序,此时参数为bac,打印AC就是a》c。
第7次调用honai函数,此时n=1,参数ABC对应的是abc,满足条件,第一次打印出b》a
至此,程序执行完毕。
#include<stdio.h>
void hanoi (int n,char A,char B,char C)
{if(n==1)
{printf("move sheet%d from %c to %c\n",n,A,C);}
else{hanoi(n-1,A,C,B);
printf("move sheet%d from %c to %c\n",n,A,C);
hanoi(n-1,B,A,C);}}
int main()
{int n;
printf("输入盘数:");
scanf("%d",&n);
hanoi(n,'A','B','C');
return 0;}
请先 后发表评论~