2016-03-09 50 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