2014-11-06 179 views
2

假設名爲printStars的函數的可用性可以傳遞一個包含非負整數值的參數。該功能打印出星號的給定數量。在Python中編寫遞歸函數

編寫一個名爲printTriangle的函數,該函數接收一個包含非負整數值的參數,並按如下方式打印一個星號三角形:首先一行n星號,後跟一行n-1個問號,然後是a一行n-2個星號,等等。

例如,如果收到5的功能,將打印

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

功能不可使用任何類型的循環(對於,同時,這樣做,而)來完成其工作。該函數應該調用printStars來完成打印單行的任務。

我有我相信的基本情況。這是我的代碼:

def printTriangle(n): 
    if n == 1: 
     printStars(n) 

我需要一些幫助來計算遞歸步驟。我想它使用n-1作爲參數,但我不知道如何正確調用printTriangle函數。提前致謝。

回答

3

讓我們用n=5作爲一個例子。有5行三角形

***** # 5 stars ... 
****  # ...followed by a 4-row triangle 
*** 
** 
* 

是分,可印刷與printStars(5),接着是4行三角形,與printTriangle(4)可打印剛一排。同樣,4行三角形只是一排4星,後面是3行三角形。一般來說,一個三角形只是一排n恆星,然後是一個三角形的n-1。正如一位老大學教授曾經告訴我們的,「相信你的遞歸」,據他的意思,在編寫printTriangle時,假設printTriangle能夠正常工作並在你可以的時候使用它。您打印n -row三角形,方法是打印n星的一行printStars(n),然後用 -row三角形打印printTriangle(n-1)。這意味着基本情況更簡單:對於n=0,什麼也不做!否則,打印一排n恆星,然後在隨後的較小三角形上進行遞歸。

def printTriangle(n): 
    if n == 0: 
     # Base case 
     return 
    else: 
     # Recursive case 
     printStars(n) 
     printTriangle(n-1) 
+0

這是完美的,但有沒有辦法在每次打印明星後添加空格或換行符? printStars函數已經定義好了,所以我不能修改它,所以我想可能是print(printStars(n),end ='\ n'))? – Droxbot 2014-11-06 19:53:09

+0

編號'printStars'似乎是直接打印到標準輸出,而不是返回一個字符串,所以你不能真正影響輸出的顯示方式。 (至少,不是以任何簡單的方式,你可以重新定義'sys.stdout'來捕獲和修改'printStars'打印的內容,但是這仍然取決於'printStars'是如何實現的並且超出了這個問題的範圍。) – chepner 2014-11-06 19:54:58

3

遞歸通過將特徵爲n的問題實例減少爲由n-1表徵的特徵而起作用。爲了有限,它必須在某些情況下停止n0

對於這個問題n是字符串的長度。

  • 所以實施f時,如果你有一些功能,可以處理打印長度n-1的期望字符串,你將只打印一個星號,然後調用該函數。訣竅是這個功能本身就是功能f。 對於長度爲0的字符串,您不打印任何內容並返回。

這將產生一個遞歸函數f時稱爲f(n),打印的n星號的字符串。

接下來你通過提供一些函數g來處理三角形。

  • 如果用參數0調用它,它將返回並且什麼都不做。 否則它將使用f(n)打印一行,然後打印換行 ,然後用參數n-1調用自己。

撥打g(5)應打印示例三角形。

您應該使用問題文本中較長的名稱作爲函數。

1

打印n星形,減少1 N,重複,直到N = 0

def printTriangle(n): 
    if n > 0: 
     printStars(n) 
     printTriangle(n-1) 

此功能保持自稱直到n爲0

+3

不從n中減去一個,然後傳遞n-1作爲參數將n減2? – Kevin 2014-11-06 19:34:56

+0

我會刪除'n - = 1'。 – 2014-11-06 19:36:06

+0

是的好點,oops – 2014-11-06 19:36:47

1
def printTriangle(n): 
    if n > 0: 
    printStars(n) 
    printTriangle(n-1) 
1

功能打印n星星,然後通過調用本身帶有參數n - 1遞減。所以基本情況應該是當n等於1時,因爲將它進一步遞減是不合邏輯的。

function pstars(n) 
    printStars(n) 

    if (n > 1) 
     pstars(n - 1) 

看看它是如何調用自身和遞減N:當n大於1

因此,在僞它出來,以減量只發生?

擾流板在Python代碼:

def printTriangle(n): printStars(n) if n > 1: printTriangle(n - 1)

0

添加在打印語句,或一些相當的,以使每個遞歸步驟打印到一個新行。

def printTriangle(n): 
    if n == 0: 
     return 
    if n > 0: 
     printStars(n) 
     print() 
     printTriangle(n-1)