2016-03-09 48 views
0

我想知道递归方法是如何工作的,以便打印由包含较小X的较大X组成的较大X,输入编号保证为奇数。递归方法如何打印页面

“宽度”是沿一条线大X. X的

示例的宽度的输入数= 3 的X的方法将打印该形状的长度(数)!

X X 

    X 

X X 

我试图解决这个问题,但我不能 可以在这里任何人帮助我..在Java代码中 ,

这是我的代码,他的作品不错,但打印错了,当numberinput = 7 5

public static String shape(String i,int numberinput) { 
//error check, not working for even numbers 
if(numberinput%2 == 0) 
    return null; 

//terminating condition, stop recursion when this occurs. 
if(numberinput == 1) 
    return "X"; 

else 

return "X"+" "+i+"\n" +" "+shape(" "+i,numberinput-2)+" "+"\n"+i+" "+"X"; 
} 

他打印时此numberinput = 5

 X X 

    X X 

    X 

    X X 

    X X 
+1

条件'numberinput%2 == 0' with'numberinput-2'将始终为真或者将始终为假 – Guy

+0

而且您并未在任何地方使用'i'。你想要实现的逻辑是什么? – biziclop

回答

1

有效的递归方法应该有两个部分。

  1. 递归调用(调用自己做工作的一部分)
  2. 中止条件(条件停止递归)

你有一个递归调用,而不是终止条件。因此,递归不会停止,直到它填满整个堆栈并导致异常。因此,您应该在递归方法中包含终止条件。

示例实现可能如下所示。

public static String shap(String i, int numberinput) { 
    //error check, not working for even numbers 
    if(numberinput%2 == 0) 
     return null; 

    //terminating condition, stop recursion when this occurs. 
    if(numberinput == 1) 
     return "X"; 

    //recursion, call recursive until terminating condition occurs. 
    return "X" + i + shap(i, numberinput-2) + i + "X"; 
} 
0

我已经写一个Java代码,其中递归是只为水平,以产生I已经使用了一个循环中的字符串:

import java.util.*; 
import java.lang.*; 
import java.io.*; 

public class Main 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     List<String> ans = new ArrayList<String>(); 
     shap(7, 1, ans); 
     //System.out.println(ans); 
     for(int i = 0;i < ans.size();i++){ 
      System.out.println(ans.get(i)); 
     } 
    } 

    public static void shap(int numberinput, int currentLevel, List<String> ans) { 
     if(currentLevel == numberinput+1) return; 
     String val = ""; 
     for(int i = 1;i <= numberinput;i++){ 
      if(i == currentLevel || i == (numberinput+1-currentLevel)) val += "X"; 
      else val += " "; 
     } 
     ans.add(val); 
     shap(numberinput, currentLevel+1, ans);//Recursion step for the levels 
    } 
} 

链接到溶液上Ideone:http://ideone.com/RioL9g