2011-12-25 34 views
-1

我试图创建一个接受一个整数参数的递归方法和打印第一Ñ正方形 由逗号分隔的,与奇数的正方形以降序随后在升序甚至正方形订购。递归分割断完全平方用于显示

例如,如果输入是8,它应该打印以下输出:

49, 25, 9, 1, 4, 16, 36, 64 

到目前为止我的代码是:

sn具有相同的值最初,唯一的区别是这是随着代码转发而改变的,而n不会改变。

private static void genSquare(int s, int n) { 
    if (s >= 0 && s <= n) { 
     if (isOdd(s)) { 
      System.out.print(Math.pow(n, 2) + " "); 
      genSquare(s - 2, n); 
     } 
     if (s == 0 || s == 1) { 
      genSquare(1, n); 
     } 
     if (isEven(s)) { 
      System.out.print(Math.pow(n, 2) + " "); 
      genSquare(s + 2, n); 
     } 
    } 
} 

我已经创建了一个while循环版本,它完美的工作。我只是没有递归版本的工作。

样本输入将对s和n使用相同的数字。

下面是循环版本的代码:

private void genLoop(int s, int n) { 
    if (isEven(s)) { 
     s--; 
    } 

    while (s <= n) { 
     if (s == 1) { 
      System.out.print(1 + " "); 
      s++; 
     } else if (isOdd(s)) { 
      System.out.print(s * s + " "); 
      s -= 2; 
     } else if (isEven(s)) { 
      System.out.print(s * s + " "); 
      s += 2; 
     } 
    } 
} 

回答

1
void calculateSquare(int n) 
    { 
//  odds descending and even ascending 
     int t=n; 
     if(n<=0) 
      return; 
     if(n%2==1) 
     { 
//   Calculate square now and print it also 
      System.out.println(n*n); 
      calculateSquare(--n); 

     } 
     else 
     { 

      calculateSquare(--n); 
      System.out.println(t*t); 

     } 

    } 

这将做的工作。

+0

真棒mam,你真的是一个算法师! 非常感谢您的帮助。 – Jaydeep 2011-12-25 06:40:25

+1

伟大的工作@Algorithmist ...现在OP不需要做他的功课! >><<叹 – 2011-12-25 07:04:56

1

试试下面的办法:

假设你的例子,其中n等于8的8方应最后打印所以你可能第一应该做一个递归调用,然后打印当前数字的平方。

考虑到n = 7的任务,上面给出的事物的顺序应该恢复为奇数。

2

问题是,在此声明:

if(s == 0 || s== 1) 
     genSquare(1,n); 

这将导致该方法无限递归。实际上,当您达到s为零或1的点时,您必须确保不会以递归方式调用genSquare。

这足以提示您为自己找出其他问题并修复其他任何错误。


此外,还有平方整数一个更简单的方法...

-1

是的,这是递归的好例子。试试这个有帮助你

public class RecursionEx { 

    static int no = 0; 
    public static void main(String[] args) { 

     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 
     System.out.println("Enter the Number"); 
     try 
     { 
      no = Integer.parseInt(bufferedReader.readLine()); 
      getSquares(no,0); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    private static void getSquares(int number,int count) 
    { 
     if(number==1) 
     { 
      System.out.print(number); 
      count=1; 
      getSquares(number+1, count); 

     } 
     else 
     { 
      if(number%2!=0&&count==0) 
      { 
       System.out.print(number*number+","); 
       getSquares(number-2,0); 
       return; 
      } 
      if(count==0) 
      getSquares(number-1,0); 

      if(number%2==0&&count==1) 
      { 
       if(number<=no) 
       System.out.print(","+number*number); 
       if(number>=no) 
        return; 

       getSquares(number+2, count); 
      } 


     } 
    } 
}