2011-07-05 51 views
0
public class Main 
{ 
    public static void pyr(int n) 
    {  
     for(int i=1;i<=n;i++) 
     { 
      for(int j = 1;j<=i;j++) 
      { 
        System.out.print("*"); 
      } 
      System.out.println(); 
     } 
    } 
} 

像這樣的星號形狀的金字塔代碼可以遞歸地實現嗎?如果是這樣,特別是2個循環作爲第一個用於練級,而第二個循環用於填充每個級別。這個迭代方法可以遞歸地實現嗎?

+0

氣味像功課 –

+0

沒錯因此,只有一個問題的第一部分;) – fyr

+0

:)這是一種,但舊的我剛剛開始遞歸併想到將其轉換爲遞歸式,但偶然發現了平衡部分。 –

回答

2

答案是肯定的 - 基本上所有的迭代都可以遞歸地完成,有時它會容易得多,但是會花費更多的時間。

對於你的問題 - 這樣做的伎倆:

public static void main(String[] args) 
{ 
    printPyramid(7); 
} 

public static void printPyramid(int lines) 
{ 
    if (lines > 1) 
    { 
     printPyramid(lines-1); 
    } 
    printLine(lines); 
    System.out.println(""); 
} 

public static void printLine(int level) 
{ 
    if (level > 0) 
    { 
     System.out.print("*"); 
     printLine(level-1); 
    } 
} 
+0

是的這工作非常感謝 –

+0

如果這回答你的問題,批准答案! –

1

「,可以通過 計算機進行評價的任何功能可在術語的遞歸函數 來表示在不使用迭代 ,在延續傳遞 風格;並且相反地任何遞歸 函數可以被表示迭代的條款 「。 來源: http://kevin.vanzonneveld.net/techblog/tag/recursion/

編輯:添加源鏈路。

+2

很好的報價,但它從哪裏來? –

+0

您報價的來源? –

0

當然,只要看看wikipedia article的章節。我也看到了一個數學證明,但我忘了我能找到它的地方。

在你的情況只是使用兩種方法。只要輸入參數大於0,就可以打印星星。

public void static printStar(int n) { 
    if(n > 0) { 
     System.out.print("*"); 
     --n; 
     printStar(n); 
    } 
} 

此代碼處理內部循環。

public void static printPyramid(int n, int start) { 
    if(start >= n) { 
    return; 
    } 

    printStar(start); 
    ++start; 
    printPyramid(n, start); 
} 

這段代碼處理你的外層循環。你是我的起點。

+0

東西不見了我認爲System.out.println();打印之前(開始);在第二種方法中,我們可以在新行中開始下一個打印(Star)。否則爲n = 5開始(0)它會打印*********** –