递归函数不工作java

时间:2014-03-25 18:10:48

标签: java recursion

我试图找出2的权力n。我为此使用了递归函数。

我的代码:

class TwoPowerN
{
  static BigInteger twoPowern(BigInteger x, long y)
  {
    BigInteger temp = new BigInteger("1");
    if( y == 0)
      return new BigInteger("1");
    temp.equals(twoPowern(x, y/2));
    if (y%2 == 0)
      return temp.multiply(temp);
    else
      return x.multiply(temp.multiply(temp));
  }

public static void main(String args[]) throws IOException
{
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
  int t = Integer.parseInt(br.readLine());
  while(t>0)
  {
    long r = Long.parseLong(br.readLine());
    BigInteger a = new BigInteger("2");
    BigInteger ans=twoPowern(a,r);
    pw.println(ans);
    t--;
   }
  pw.close();
}
}

但我没有得到所需的结果。

对于1 2 3 4 5个案,我收到2 1 2 1 2。 “C”中的类似程序(使用类似函数但使用int)可以正常工作。

任何人都可以解释这是什么错误吗?

3 个答案:

答案 0 :(得分:4)

我认为您需要分配递归结果,而不是测试相等性:

temp.equals(twoPowern(x, y/2)); // This is checking for equality

应该是

temp = twoPowern(x, y/2); // This is assigning the value

答案 1 :(得分:1)

temp.equals(twoPowern(x, y/2));

是java中的条件语句,而不是赋值,因此您不是 存储递归值。

答案 2 :(得分:0)

这更简单:

public class power2 {

    public static long power2( int power)
    {
        if(power <= 0)
            return 1;
        return 2 * power2(power-1);
    }

    static BigInteger twoPowern(long y)
    {
        if( y == 0) {
            return BigInteger.ONE;
        }

        return new BigInteger("2").multiply(twoPowern(y-1));
    }  

    public static void main(String[] args)
    {
        for(int i = 0; i < 10; i++)
        {
            System.out.println("2^" + i + "," + power2(i));
            System.out.println("2^" + i + "," + twoPowern(i));
        }
    }
}

使用常规长片或BigInteger。