我正在处理数据结构问题。到目前为止我的作业如下所示。
import java.util.Scanner;
import java.util.Random;
/**
* Recursive methods for fun & profit
*
* @author (your name)
* @version (a version number or a date)
*/
public class DSLab2
{
/**
* Prints 2 lines of text for each recursive call, indicating call number
* (a value >= 1, and <= value of numCalls, as illustrated below. Each
* level of recursion should be indicated by indenting the input line by
* r spaces. For example, if numCalls is 3, the method should print:
* call 1
* call 2
* call 3
* back 3
* back 2
* back 1
* @param r the level of method calls
* @param numCalls the number of intended levels
*/
public static void stairSteps (int r, int numCalls)
{
System.out.println("call "+r);
System.out.println("back "+r);
}
我尝试了以下方法,但它只输出了阶梯式要求的下半部分。我无法弄清楚如何递归调用该方法,以便在每次调用 without them being next to each other
中打印两行。
public static void stairSteps (int r, int numCalls)
if(numCalls>0)
{
for ( int i = 0; i <numCalls ; i++){
System.out.print(" ");
}
System.out.println("back " + r);
stairSteps(r-1, numCalls-1);
}
else
return;
有什么建议吗?
答案 0 :(得分:1)
public static void stairSteps (int r, int numCalls)
{
if ( numCalls==0 )
return ;
for (int i=0; i<r; i++)
System.out.print(" ");
System.out.println("call "+r);
stairSteps(r+1, numCalls-1) ;
for (int i=0; i<r; i++)
System.out.print(" ");
System.out.println("back "+r);
}
public static void main(String argv[]) {
stairSteps(1, 4) ;
}
call 1
call 2
call 3
call 4
back 4
back 3
back 2
back 1
答案 1 :(得分:0)
你应该玩List&amp;堆栈数据结构如下。
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class Main {
private static List<String> list = new ArrayList<>();
private static Stack<String> stack = new Stack<>();
public static void main(String[] args) throws Exception {
stairSteps(1,3);
for(String s:list) System.out.println(s);
while(!stack.isEmpty()) System.out.println(stack.pop());
}
public static void stairSteps (int r, int numCalls)
{
if(numCalls==0) return;
StringBuilder sb = new StringBuilder();
for(int i=1;i<r;i++) sb.append(" ");
list.add(sb.toString()+"Call "+r);
stack.push(sb.toString()+"Back "+r);
if(r<numCalls) stairSteps(r+1, numCalls);
}
}