在递归方法中使用变量不会在每次调用后重新定义自身

时间:2015-10-22 18:02:16

标签: java recursion

我将在下面发布我的代码,因为这很难描述。下面的代码可以工作,但它在main方法中使用Math.pow而不是在帮助器中,所以如果有人可以告诉我一种方法将功能转移到辅助方法而不会弄乱程序,这将是非常值得赞赏的。

主要方法:

File.AppendAllText(filename, familiesSpinner.SelectedItem.ToString()  + System.Environment.NewLine);

帮助方法:

  Scanner keyboard = new Scanner(System.in);

  System.out.println("Please enter an integer: ");
  double input = keyboard.nextInt();

  double x = Math.pow(2.0, input);
  int n = (int)x;

  System.out.println(starStr(n));

编辑:

  public static String starStr(int n)
  {     
     if (n >= 1) {
        return ("*" + starStr(n-1));
     }
     else {
        return "";
     }
  }

2 个答案:

答案 0 :(得分:1)

这样的事情会起作用。你根本不需要使用电源功能。从1星开始,在递归的每一步中加倍星数。

public static void main(String[] args) {

    Scanner keyboard = new Scanner(System.in);

    System.out.println("Please enter an integer for the number of stars: ");
    int input = keyboard.nextInt();

    System.out.println(doStars(input));
}

public static String doStars(int n)
{
    //If n == 0 the recursion is done
    //Otherwise, reduce n by 1 and double the number of stars
    if(n == 0)
        return "*";
    else
    {
        String output = doStars(n - 1);
        return output + output;
    }
}

答案 1 :(得分:0)

我认为这就是你要找的东西。不确定您是否已经学习了树数据结构,但这是我的变量名的目的。

public class Main {
    public static void main(String[] args) {

        for (int i = 0; i < 5; i++) {
            // 1 + (2^n)-1 = 2^n 
            System.out.println("*" + doStars(i));
        }
    }

    public static String doStars(int n)
    {
        if (n == 0) {
            return "";
        }
        else {
            String subTree = doStars(n - 1); 
            return subTree + "*" + subTree; // length = (2^n)-1
        }
    }
}

输出

*
**
****
********
****************

可视化 - 从小到大顺时针读取三角形

                        "*"
                         +
                     doStars(2)
                        "*"
      doStars(1)         +        doStars(1)
          "*"                         "*"
doStars(0) + doStars(0)     doStars(0) + doStars(0)
   ""           ""              ""          ""