我想打印如下:
5
54
543
5432
54321
我做了一个程序,但没有递归递减:
public static void main(String[] args){
func(5);
}
public static String func(int num){
String temp = "";
if(num == 0){
return "";
}
temp = temp + num;
System.out.println(temp);
return temp + func(num-1);
}
我的上述程序打印如下:
5
4
3
2
1
问题:我可以递归地仅使用1个参数(num)吗?因为我能够通过使用“”和num作为参数来制作一个有效的程序。我只想要1.我也避免在递归方法中循环。可能吗? 我一直在考虑像某些日子这样的解决方案,似乎无法想到这一点。
答案 0 :(得分:0)
只需沿着
传递字符串public static void main(String[] args){
func("", 5);
}
public static String func(String tmp, int num){
if(num > 0) {
String res = tmp + num;
System.out.println(res);
return func(res, num - 1);
} else {
return tmp;
}
}
答案 1 :(得分:0)
您正在初始化每次通话时的临时空值
public static String func(int num, String temp){
if(num == 0){
return "";
}
temp = temp + num;
System.out.println(temp);
return temp + func(num-1, temp);
}
public static void main(String... d) {
func(5, "");
答案 2 :(得分:0)
您确定不想使用两个参数吗?因为这样的某些东西是可能的。
String function1(int num, int max)
{
if(num=0)
return;
for(i=max; i=num; i--)
{
System.out.print(i);
}
System.out.print('\n')
function1(num-1, max);
}
只有一个参数的另一个想法是:
String function2(int num){
int dig = num % 10; // Get last digit from param
last dig --; // new last Digit
if (dig !=0)
{
num = num * 10 + dig; //Add dig to the right side.
System.out.println(num);
return function2(num);
}else
{
return "";
}
}
但此功能仅适用于小于10的整数。所以我建议使用两个参数的函数,例如上面的参数。
如果您已经有一个参数的程序使用包装函数。
String function(int num)
{
return function1(num, num);
}
答案 3 :(得分:0)
一个参数版本(已更新):
public static void main(String[] args){
func(5);
}
public static String func(int num){
String numStr = num + "";
int lastDigit = Integer.valueOf(numStr.substring(numStr.length() - 1)).intValue();
if (lastDigit == 0){
return numStr.substring(0, numStr.length()-1);;
}
System.out.println(numStr);
int newNum = num * 10 + lastDigit - 1;
return func(newNum);
}
这就是您所描述的内容,并将最后一个值作为字符串返回。
答案 4 :(得分:0)
你需要跟踪递归函数之外的String temp
(因为你不想传递它)。
你可以这样做:
class Main {
private static String temp = "";
public static String func(int num){
if(num == 0){
return "";
}
temp = temp + num;
System.out.println(temp);
return temp + func(num-1);
}
public static void main(String[] args) {
func(5);
}
}
或者像这样:
class Main {
public static void main(String[] args) {
Func func = new Func();
func.apply(5);
}
}
class Func {
String temp = "";
public String apply(int num) {
if (num == 0){
return "";
}
temp = temp + num;
System.out.println(temp);
return temp + apply(num-1);
}
}
答案 5 :(得分:0)
您可以使用公共单参数和私有双参数。
private static String func(int num, String soFar) {
if (num == 0) {
return soFar;
}
soFar += num;
System.out.println(soFar);
return func(num - 1, soFar);
}
public static String func(int num) {
return func(num, "");
}
func(5);
5
54
543
5432
54321