递归相关:两个数字的乘积

时间:2012-03-16 07:00:36

标签: java recursion product

我认为这会相对容易,但运行它会产生错误的结果。它可能是结果变量的初始化,但我似乎无法修改代码,以便正确。到目前为止,这是我的进展。

public class test 
{
   public static void main(String[] args)
   {
      int num1 = 10;
      int num2 = 4;

      int res = product(num1, num2);

      System.out.println(res); 
   }

   public static int product(int n1, int n2)
   {
      int result = 0 ;

      if (n2 > 0)
      {
          result = result + n1 ;
          product(n1,n2-1) ;
      }
         return result ;
   }
}

4 个答案:

答案 0 :(得分:4)

更好的解决方案 * 这里 *

public static int product(int n1, int n2) 
           { 
              if (n2 > 1) 
              { 
                  n1 += product(n1,n2-1) ; 
              } 
                 return n1; 
           }

答案 1 :(得分:1)

 public static int product(int n1, int n2)
   {
      int result = 0 ;

      if (n2 > 0)
      {
          result = result + n1 ;
          product(n1,n2-1) ;
      }
         return result ;
   }

在这段代码中,每次调用方法时都会产生result = 0,这显然是你不想做的。相反,您应该首先在主代码中初始化它,然后将其传入,如此

public static int product(int n1, int n2, int result)

然后当你做递归时,只需每次传递结果!

像这样:

product(n1, n2-1, result);

你的主要应该是这样的:

public static void main(String[] args)
   {
      int num1 = 10;
      int num2 = 4;
      int result = 0;

      int res = product(num1, num2, result);

      System.out.println(res); 
   }

这将做什么,是使结果的值可用于你的函数,初始化。

编辑:

在进行递归时,我们必须记住将我们想要的东西设置为我们调用的函数,而不是再次调用该函数,否则,将返回初始答案(在本例中为n1的值)。 / p>

这样做:

     public static int product(int n1, int n2, int result)
   {

      if (n2 > 0)
      {
          result = result + n1 ;
          result = product(n1,n2-1, result) ;
      }
         return result ;
   }
}

答案 2 :(得分:0)

public class Test{
static int result;
public static void main(String...x){
    int num1 = 10;
      int num2 = 4;

      int res = product(num1, num2);

      System.out.println(res); 
   }

   public static int product(int n1, int n2)
   {


      if (n2 > 0)
      {
          result = result + n1 ;
          product(n1,n2-1) ;
      }
         return result ;
   }
}

你的问题在于变量结果,每次调用方法时,变量都会用零初始化它。

答案 3 :(得分:0)

更短的解决方案

public static int product(int n1, int n2) {
    return n2 == 0 ? 0 : n1 + product(n1, n2-1);
}

已经优化了(这类似于在CPU中实际实现乘法的方式)

public static int product(int n1, int n2) {
    if (n2 == 0) return 0;
    int p = product(n1, n2 >> 1);
    return p + p + ((n2 & 1) == 0 ? 0 : n1);
}

这将最多递归31次,因为第一个解决方案可能会超过20亿次。