Java编程语言支持方法调用自己本身,大致的形式就是:
拥有这一特性的方法也叫作递归方法(递归函数)。在方法体内部直接或者间接地自己调用自己,叫作递归调用,即方法的嵌套调用是方法本身。递归方法如果没有加入任何流程控制,那么在执行过程中就会出现“方法调用方法的自己,方法的自己继续调用方法的自己的自己,一直循环下去”的情况,最终导致程序发生死循环。建议读者谨慎执行动手写4.5.1,因为它可能会造成电脑死机或者长时间无响应。
动手写4.5.1
动手写4.5.1将会无限循环输出“方法仍在调用”,直到Java程序超时或者内存耗尽,运行结果如下:
图4.5.1 无限循环程序运行
当某个执行递归调用的方法没有附加条件判断时,可能会造成无限循环的错误情况。因此,当我们编写递归方法时,需要加入一些判断条件,用于判断是否需要执行递归调用,并且在一定条件下终止方法的递归调用。(www.xing528.com)
递归代码的好处是,和非递归方法相比,递归方法代码逻辑更清晰,代码可读性更高;其缺点是由于层层的方法嵌套,会有额外的内存开销,以及可能发生的无限循环灾难。这些年计算机硬件性能不断升级,大部分情况下递归程序的效率问题已经得到解决,因此鼓励用递归方法实现程序思想。
除了方法递归调用容易出现无限循环的问题外,方法之间互相调用也可能会出现无限循环。
动手写4.5.2
动手写4.5.2的运行结果为:
图4.5.2 方法间互相调用出现无限循环
动手写4.5.2中,Jim()方法会调用Jack()方法,而Jack()方法执行中又会调用Jim()方法,因此导致出现无限循环。在编程中,需要尽量避免两个方法互相调用的情况发生,以防止出现无限循环,从而导致系统内存泄漏。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。