首页 理论教育 成员方法递归的实践-Java程序设计与应用开发

成员方法递归的实践-Java程序设计与应用开发

时间:2023-11-26 理论教育 版权反馈
【摘要】:递归类型有两种,其一是方法调用其自身,就是直接递归;其二是一个方法依次调用另一个方法,被称为间接递归。下面,以递归方法解Hanoi塔问题为例来说明递归方法的应用。称这种已知解答的简单情形为递归基础。通过有限次递归能够归结到递归基础是递归算法有解的必要条件,否则该算法将进入无限次递归的所谓“死循环”状态。下面以Fibonacci数列F作为第2个递归算法的例题。

成员方法递归的实践-Java程序设计与应用开发

递归算法(recursion)有时也称为递归方法,是指一个方法直接或间接地调用自己的算法。递归方法会重复调用自身方法,但一次一次地将问题简单化,直到最简单并已存在解答时为止。递归类型有两种,其一是方法调用其自身,就是直接递归;其二是一个方法依次调用另一个方法,被称为间接递归。下面,以递归方法解Hanoi塔问题为例来说明递归方法的应用。

【例4-7】(Hanoi塔问题)设有3根柱子分别记为A,B,C。A柱上有n个带孔的盘子,按规定大盘必须在小盘的下面,如图4-3所示。要求将这n个盘子从A柱借助于B柱移到C柱,每次只允许移动一个盘子,且在移动过程中都必须保持大盘在小盘的下面。求其解。

978-7-111-44824-2-Part01-233.jpg

图4-3 Hanoi塔问题示意图

978-7-111-44824-2-Part01-234.jpg

978-7-111-44824-2-Part01-235.jpg

运行结果如下:

在上述程序中,方法hanoi(int n,char one,char two,char three)的定义中两次调用自身方法hanoi(n-1,one,three,two)和hanoi(n-1,two,one,three)。但这两次调用的参数是(n-1),从而保证了递归方法可以归结到n==1的已知解答的情形。称这种已知解答的简单情形为递归基础。通过有限次递归能够归结到递归基础是递归算法有解的必要条件,否则该算法将进入无限次递归的所谓“死循环”状态。

下面以Fibonacci数列F(n)作为第2个递归算法的例题。Fibonacci数列产生于古老的兔子数。关于“兔子数”的有趣故事,可以在任何一本趣味数学书中找到。然而Fibonacci数列在现代计算机密码学、信息隐藏和信号处理领域中有着重要的应用和研究。(www.xing528.com)

【例4-8】(Fibonacci数列)Fibonacci数列F(n),定义如下:

978-7-111-44824-2-Part01-236.jpg

用递归算法编写程序计算F(n)。

978-7-111-44824-2-Part01-237.jpg

978-7-111-44824-2-Part01-238.jpg

运行结果如下:

978-7-111-44824-2-Part01-239.jpg

从上述两个例子可以知道,递归方法是一种倒推的方法。要计算第n个结果,就要利用包括第(n−1)个结果在内的以前的结果。因此,递归方法必须有一个基础。比如,对于例4-7 Hanoi塔问题,已知当n=1时其解是A=>C。又如,对于例4-8 Fibonacci数列F(n),已知F(2)=F(1)=1。若没有这样的基础,递归将无结果。注意,递归方法虽然可以使程序简洁,但当递归的深度较大时,即当n较大时,运算效率将降低,甚至会出现“死机”现象。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈