由编程实现汉诺塔递归过程所想到的

这个问题,我没有独立做出来,想了很久,然后看了两步提示,才做出了后面的过程,第一步看了一下输入的格式,郝斌老师的源代码(当然一这个算法最开始肯定也不是郝斌老师想出来的),输出语句里面,每一个步骤只有3个控制符,控制3个输出变量,这让我以为函数的参数列表也是只有3个形参,然后想了半天,又没想出来,又去看了一眼函数形式,发现是4个参数,这才又想了一会才想出来。

其实想想,函数形参列表的形参个数与函数最终的输出控制符个数,本就是两码事,对一个函数来说,参数列表是已知的条件,是我们需要告诉这个函数的信息,然后具体怎么操作,那交由函数体来实现,所以说这里,如果说形参个数只有三个,盘子的个数,以及2个字符型字母代表柱子的编号,那显然是属于条件不足,函数体的代码操作再精妙,也是巧妇难为无米之炊。

void Hannuota(int a,char A,char B,char C){};

形参列表,或者说几个数字,或者说这里的盘子的个数,以及哪几个柱子,当然这里的柱子号的排序本身也是一个信息,将n个盘子从A柱子上借助B柱子移动到C柱子上,所以可以说形参列表可以表达的东西很多。

很多其他的函数,单独独立出来去定义和调用,更多的是为了代码规范,可读性和可维护性,比如平方函数,阶乘函数,代码思想逃不过三大流程结构的函数(顺序,条件,循环),main函数里面一样可以直接写。

但是递归性的问题,无法在main函数里面写出来,因为递归是需要函数自己调用自己,要不让main函数自己也调用自己?那谁来给main函数传递实参呢?因此,比如main函数之外必须独立定义针对性函数。

三大流程结构+递归思想,这几个法宝掌握了,程序的流程绝对逃不过你的手心。

你可能感兴趣的:(由编程实现汉诺塔递归过程所想到的)