我一直在四处寻找练习我的递归,但是我在codingBat和其他一些问题上已经没有实践问题了.如果您有更多建议,请随时评论!
我的问题是,即使您必须或可以更改参数,您如何确定何时可以简单地将方法转换为递归方法?
需要递归方法的元素将是一个需要的基本情况,它认为递归的结束,以及循环或不循环的原因(它恢复到基本情况条件).我可能错过了递归方法的任何其他重要方面吗?
我已经找到的递归方法的一个例子(但尚未解决被递归)如下所示.它来自codingBat,我不是要求任何人纠正我的代码.它只是一个可以转换的方法的例子,我发现了.我会弄清楚.
编辑为答案.由于混淆删除了示例.编写递归方法时需要注意的要求:
基本上,递归可以模拟每个循环,因此您可以为包含循环的每个方法创建一个递归方法 - 但是不能保证递归版本将完成(因为您的循环版本可能使用状态来缓存结果,而您的递归版本没有)甚至运行(因为你可能得到一个StackOverflowError- 如何拟合).
编辑:请注意,即使使用直接递归可能导致堆栈溢出,也有一种技术可以解决这个问题,即trampolining(文章用于python,但也适用于Java 8的lambdas).
编辑2:还请注意迭代和递归解决方案之间的关系是由Church-Turing- guess进行的.
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |