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;}

举报
评论 0