Java 使用递归打印赔率为N的平方,然后打印偶数的平方
我必须使用递归打印n的平方,我必须先打印降序的奇数平方,然后是升序的偶数平方 奇数排序代码有效,而偶数排序代码无效 我将问题分为两种方法,然后将其合并为一种方法,第一种方法将按降序打印奇数平方,然后第二种“应”按升序打印偶数平方: 给你:Java 使用递归打印赔率为N的平方,然后打印偶数的平方,java,recursion,Java,Recursion,我必须使用递归打印n的平方,我必须先打印降序的奇数平方,然后是升序的偶数平方 奇数排序代码有效,而偶数排序代码无效 我将问题分为两种方法,然后将其合并为一种方法,第一种方法将按降序打印奇数平方,然后第二种“应”按升序打印偶数平方: 给你: public static String printSquares(int n) { // Prints out the squares to n // Odd numbers first in descending order //
public static String printSquares(int n) {
// Prints out the squares to n
// Odd numbers first in descending order
// Even numbers next in ascending order
return oddsSquared(n) + evensSquared("", n);
}
public static String evensSquared(String s, int n) {
// I have no idea why this is not working
if (n < 0) {
throw new IllegalArgumentException("Illegal Argument");
}
if (n == 2) {
return 2*2 +" "+ s;
} else if (n % 2 == 0) {
s = n * n +" "+ s;
return s + evensSquared(s, n--);
} else {
return evensSquared(s, n--);
}
}
public static String oddsSquared(int n) {
if (n < 0) {
throw new IllegalArgumentException("Illegal Argument");
}
if (n == 1) {
return 1 + "";
} else if (n % 2 != 0) {
return n * n + " " + oddsSquared(n - 1);
} else {
return oddsSquared(n - 1);
}
}
公共静态字符串printSquares(int n){
//将正方形打印到n
//奇数以降序排列
//偶数按升序排列
返回oddsquared(n)+evensSquared(“,n”);
}
公共静态字符串evensSquared(字符串s,int n){
//我不知道这为什么不起作用
if(n<0){
抛出新的IllegalArgumentException(“非法参数”);
}
如果(n==2){
返回2*2+“”+s;
}否则如果(n%2==0){
s=n*n+“”+s;
返回s+均匀平方(s,n-);
}否则{
回归平差平方(s,n-);
}
}
公共静态字符串oddsSquared(int n){
if(n<0){
抛出新的IllegalArgumentException(“非法参数”);
}
如果(n==1){
返回1+“”;
}否则如果(n%2!=0){
返回n*n+“”+oddsSquared(n-1);
}否则{
返回oddsSquared(n-1);
}
}
您的第一个问题是使用n--
在奇数代码中,使用n-1
调用函数内部的函数,实际上返回n-1
(我知道这很明显)。例如,如果n=5
,则n-1
返回4
但是在偶数的代码中,您使用n--
调用函数内部的函数,该函数不返回n-1
,而是n
。(这就是棘手的地方)<代码>n--返回n
然后应用负1。因此,如果您有n=5
,那么n--
将返回5
您可以使用--n
,在返回它之前先将-1应用于n
,也可以使用不会混淆的n-1
,以避免错误
第二个问题是:
s = n * n +" "+ s;
return s + evensSquared(s, n--);
您要添加两次s,一次在末尾,一次在开头。您应该删除第二个
s = n * n +" "+ s;
return evensSquared(s, n--);
如果需要按升序打印,则应首先调用rescursion,并应首先到达最低的数字 更新了代码有一个条件出现了错误
public static String evensSquared(String s, int n) {
// I have no idea why this is not working
if (n < 0) {
throw new IllegalArgumentException("Illegal Argument");
}
if (n == 2) {
return "4";
} else if (n % 2 == 0) {
return evensSquared(s, n-1)+" "+n*n;
} else {
return evensSquared(s, n-1);
}
}
公共静态字符串evensSquared(字符串s,int n){
//我不知道这为什么不起作用
if(n<0){
抛出新的IllegalArgumentException(“非法参数”);
}
如果(n==2){
返回“4”;
}否则如果(n%2==0){
返回均匀度平方(s,n-1)+''+n*n;
}否则{
返回均匀度平方(s,n-1);
}
}
这里的诀窍是我们被要求按相反的顺序分两组。在递归中,我们可以将降序与前置相关联,升序与追加相关联。监视(JavaScript代码):
//首先是奇数的平方
//降序,然后是
//按升序平方的偶数
函数f(n){
如果(n==1)
返回“1”;
如果(n&1)
返回n*n+''+f(n-1);
返回f(n-1)+''+n*n;
}
控制台日志(f(8))代码>您缺少实际问题和任何解释。你不能像那样卸载代码,大多数人无论如何都不会运行它。你能添加一个例子,说明什么是输入,什么是预期输出,以及你的输出是什么吗?它像printSquares(5)
应该返回25,9,1,16,4
?你的算法的输出是什么?您是否尝试过一些示例结果,如4或5?你应该让日志记录者看看你的代码进展如何,如果你使用的是IDE,甚至是一个调试器。当我们谈论Java时,为什么要用javascript回答呢?@vincrichaud因为函数非常简单,可以转换,很容易在堆栈溢出网页上演示,我使用的是电话,所以我没有访问IDE,而且我不精通Java,因此我必须花一些时间进行实验,以确保代码是正确的:)