2014-11-06 186 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)