我想获得一个显示类似1*2*3*4
的输出,但我得到4*3*2*1
这是我的代码:
public static int fact(int n)
{
if(n ==1)
return 1;
else
return n * fact(n-1);
}
public static int factorForm(int n)
{
System.out.print(n);
if (n == 1)
return 1;
else
{
System.out.print("*");
return n + '*' + factorForm(n-1);
}
}
答案 0 :(得分:3)
你正在呼唤事实(4)
然后你打印
然后你称之为fact(3)
如果你颠倒过来,你会得到你想要的东西:
public class fact {
static int f(int n)
{
if (n ==1 )
{
System.out.print(1);
return 1;
}
int ret= (n * f(n-1));
System.out.print("*");
System.out.print(n);
return ret;
}
public static void main(String[] args)
{
int ret=f(4);
System.out.print("=");
System.out.println(ret);
}
}
答案 1 :(得分:1)
要反转输出,应在进行递归调用后打印n
:
public static int factorForm(int n)
{
if (n == 1)
{
System.out.print(1);
return 1;
}
else
{
int rest = factorForm(n-1); // prints 1*2*...*n-1
System.out.print("*");
System.out.print(n);
return rest * n;
}
}
表达式n + '*' + factorForm(n-1)
执行整数加法,而不是乘法或字符串连接。我改变它来执行乘法运算。如果打算返回打印的字符串,则返回类型和rest
的类型应更改为String
,基本情况下的返回值应为"1"
,并且该表达式应更改为rest + "*" + n
。
答案 2 :(得分:0)
如下打印后返回,更重要的是了解递归的工作原理:
public static int factorForm(int n)
{
if (n == 1){
System.out.print("1*");
return 1;
}
else
{
int val = n * factorForm(n-1);
System.out.print(n + "*");
return val;
}
}
答案 3 :(得分:0)
如果你想得到1 * 2 * 3 * 4的结果。我想你可以做到这一点。 这是我的代码:
public static String fact(int n) {
if (n < 1) {
throw new RuntimeException("n must be int type and up 0");
}
else if (n == 1) {
return "1";
} else {
return n + "*" + fact(n - 1);
}
}
public static String factorForm(String str) {
String [] arr = str.split("\\*");
String [] newArr = new String[arr.length];
String result = "";
if (arr.length > 1) {
for (int i = 0; i < arr.length; i++) {
newArr[arr.length - i - 1] = arr[i];
}
for (int i = 0; i < newArr.length; i++) {
result += newArr[i] + (i != newArr.length - 1 ? "*" : "");
}
return result;
} else {
return str;
}
}