在计算机编程的道路上,决心修行时,第一个想到的起点却是递归,也许这就是编程思想的一种默契。
递归是程序设计中一个强有力的工具,但是大多数人不会自然而然地想到递归。递归可以方便我们解决某些问题,我们需要考虑在哪些情况下使用递归。一个问题要采用递归递归方法来解决问题时,必须符合以下3个条件。
(1)解决问题时,可以把一个问题转化成为一个新的问题,而这个新的问题的解决方法仍与原问题的解法相同,只是处理的对象不同,这些处理的对象之间是有规律的递增或递减的;
(2)可以通过转化过程使问题得到简化;
(3)必定要有一个明确的结束递归的条件,否则递归将会无止境地进行下去,直到耗尽系统资源。也就是说必须要有某个终止递归的条件。
如阶乘问题,求n的阶乘(n!),可以转化为n(n-1)!;而要求n(n-1)!又可以转化为(n-1)((n-2)!;……;这里面都 有一个数乘以另一个数的阶乘问题,被处理的对象分别是n,n-1,……,是有规律的递减。但是我们不能让程序无止境地执行下去,必须给一个结束条件。该问题恰好有一个结束条件,即当n=0时,0!=1。
有两种情况常用到递归方法:
(1)定义是递归的。
(2)问题的解法是递归的。
阶乘函数的定义采用的就是递归方法。如
1 ,