识别可以转换为递归方法的方法

Jah*_*ein 1 java recursion

我一直在四处寻找练习我的递归,但是我在codingBat和其他一些问题上已经没有实践问题了.如果您有更多建议,请随时评论!

我的问题是,即使您必须或可以更改参数,您如何确定何时可以简单地将方法转换为递归方法?

需要递归方法的元素将是一个需要的基本情况,它认为递归的结束,以及循环或不循环原因(它恢复到基本情况条件).我可能错过了递归方法的任何其他重要方面吗?

我已经找到的递归方法的一个例子(但尚未解决被递归)如下所示.它来自codingBat,我不是要求任何人纠正我的代码.它只是一个可以转换的方法的例子,我发现了.我会弄清楚.

编辑为答案.由于混淆删除了示例.编写递归方法时需要注意的要求:

  1. StackOverFlow错误.
  2. 包含循环的所有方法都可以递归,但它可能不是最佳的实现选择.
  3. 对于要解决的问题,递归方法应该是自然的.

llo*_*giq 5

基本上,递归可以模拟每个循环,因此您可以为包含循环的每个方法创建一个递归方法 - 但是不能保证递归版本将完成(因为您的循环版本可能使用状态来缓存结果,而您的递归版本没有)甚至运行(因为你可能得到一个StackOverflowError- 如何拟合).

编辑:请注意,即使使用直接递归可能导致堆栈溢出,也有一种技术可以解决这个问题,即trampolining(文章用于python,但也适用于Java 8的lambdas).

编辑2:还请注意迭代和递归解决方案之间的关系是由Church-Turing- guess进行的.