首页 > 解决方案 > 递归问题缺少乘法

问题描述

我有这个递归代码

 public static int m(int n1, int n2) {
        int result;   
   if (n2 - n1 == 0) {          
result = n1;      }
 else {
            int mid = (n1 + n2) / 2;
            result = m(n1, mid) * m(mid + 1, n2);
        }
        return result;
    }

但我不明白为什么不执行递归乘法的第二部分,如果我输入参数 (2,3) 结果是 6 但在我下面的计算中是 120

              
                m(2,3)
              mid= 5+2=3
         m(2,3)   *    m(4,5)    
     mid= 2+3/2=2     mid= 4+5/2=4
   m(2,2) * m(3,3)    m(4,4)  * m(5,5)
     
      2     *   3         4   *   5
                  6 * 20
                     120

你能解释一下为什么吗谢谢

标签: java

解决方案


我认为您在第一步中计算了中间错误。正确的递归树将是 -

            m(2,3)
          mid = 2 [=5/2] 
     m(2,2)   *    m(3,3)    
        2     *       3         
              = 6 

推荐阅读