java递归打印数,仅含1个参数
我想打印如下内容:java递归打印数,仅含1个参数,java,recursion,Java,Recursion,我想打印如下内容: 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 ""; } tem
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作为参数来制作一个工作程序。我只想要一个。我也在避免递归方法中的for循环。可能吗?
我已经想了好几天的解决办法,但似乎想不出这个办法。把绳子传过去就行了
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;
}
}
每次调用时,您都将temp初始化为空
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, "");
您确定不想使用两个参数吗?因为这样的事情是可能的
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);
}
单参数版本(已更新)):
这就是您所描述的,并以字符串形式返回最后一个值。您需要在递归函数之外跟踪
字符串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);
}
}
或者像这样:
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);
}
}
您可以使用公共的单参数1和私有的双参数1
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
这也是我的解决方案。所以我认为最好的方法是使用两个参数。我不敢想使用1个参数?呵呵。我想最好的办法是用两个参数。我的大脑只适合初学者。是的,最好的方法是使用两个参数。@user2402896的那一个很不错。如果不想重写otehr程序,请使用包装器。但是我认为修复代码不会花费太多的精力。所以仅仅1个参数是不可能的?