递归打印两行,用于使用楼梯模式的每个呼叫



我正在研究一个数据结构问题。下面列出了作业和我到目前为止所拥有的内容。

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;

有什么建议吗?

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

您还将按如下方式使用 List & Stack 数据结构。

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);
}
}

最新更新