使用Stairstep模式为每次调用递归打印两行

时间:2018-03-14 01:56:29

标签: java recursion recursive-datastructures

我正在处理数据结构问题。到目前为止我的作业如下所示。

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;

有什么建议吗?

2 个答案:

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

}