【问题标题】:Java Recursion methodJava 递归方法
【发布时间】:2014-05-23 00:36:16
【问题描述】:

如果您给出 n = 20,则以下方法返回 5。
我的问题是每次迭代如何增加 1 ?

mystery(10) + 1 
= mystery(5) + 2 
= mystery(2) + 3 
= mystery(1) + 4 
= mystery(0) + 5 = 5. 

我在递归方面遇到了一些困难。

public static int mystery(int n){
   if(n <= 0){
        return 0;
   }else{
       return mystery(n / 2 ) + 1;
   }
}

【问题讨论】:

  • 我的问题是 1 如何在每次迭代中递增?请澄清。
  • 在调试器中逐步完成 - 一切都会得到解答
  • 简单地说你可以认为它返回ln(n) + 1
  • @devnull 应该是ln(n)/ln(2) + 1,或者log-base-2(n) + 1

标签: java recursion


【解决方案1】:
mystery(20) = mystery(10) + 1
mystery(20) = (mystery(5) + 1) + 1
mystery(20) = ((mystery(2) + 1) + 1) + 1
mystery(20) = (((mystery(1) + 1) + 1) + 1) + 1
mystery(20) = ((((mystery(0) + 1) + 1) + 1) + 1) + 1

我们知道mystery(0) = 0。

mystery(20) = ((((0 + 1) + 1) + 1) + 1) + 1
mystery(20) = (((1 + 1) + 1) + 1) + 1
mystery(20) = ((2 + 1) + 1) + 1
mystery(20) = (3 + 1) + 1
mystery(20) = 4 + 1
mystery(20) = 5

或者,简单地说,我们得到1+1+1+1+1=5

关于递归的非常好的视频:https://www.youtube.com/watch?v=Mv9NEXX1VHc

【讨论】:

    【解决方案2】:

    查看代码应该很明显:

    mystery(20) = mystery(10) + 1
    mystery(10) = mystery(5) + 1
    mystery(5) = mystery(2) + 1
    mystery(2) = mystery(1) + 1
    mystery(1) = mystery(0) + 1
    mystery(0) = 0
    

    现在返回并插入所有值,例如

    mystery(1) = mystery(0) + 1 = 0 + 1 = 1
    mystery(2) = mystery(1) + 1 = 1 + 1 = 2
    mystery(5) = mystery(2) + 1 = 2 + 1 = 3, etc.
    

    【讨论】:

      【解决方案3】:

      每次调用mystery(),它都会返回调用自身返回的值加1。因此,对于每次调用,返回的数字都会增加1。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-02
        • 2014-05-03
        • 2013-07-20
        相关资源
        最近更新 更多