我正在尝试创建一个接受整数参数的递归方法并打印第一个 n 正方形 用逗号分隔,奇数正方形按降序排列,偶数正方形按升序排列。
例如,如果输入为8,则应打印以下输出:
49, 25, 9, 1, 4, 16, 36, 64
到目前为止我的代码是:
s
和n
最初具有相同的值,唯一的区别是,在n
不变的情况下,s会更改为代码转发。
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;
}
}
}
答案 0 :(得分:2)
问题出在这句话中:
if(s == 0 || s== 1)
genSquare(1,n);
这会导致该方法无限递归。事实上,当你到达s
为零或一的点时,你必须确保不要递归地调用genSquare。
这足以暗示你为自己找出其余部分......并修复任何其他错误。
此外,还有一种更简单的方法来平算整数...
答案 1 :(得分:1)
尝试以下方法:
假设你的例子中n等于8. 8的平方应该打印到最后,所以你可能首先要做一个递归调用,然后打印当前数字的平方。
考虑到n = 7的任务,上面给出的事物的顺序应该被还原为奇数。
答案 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);
}
}
这可以胜任。
答案 3 :(得分:-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);
}
}
}
}