假设有一个名为printStars的函数可以传递一个包含非负整数值的参数。该函数打印出给定数量的星号。
编写一个名为printTriangle的函数,它接收一个包含非负整数值的参数,并按如下方式打印一个星号三角形:首先是一行n个星号,然后是一行n-1个问号,然后是一行n-2个星号,等等。
例如,如果函数收到5,则会打印
*****
****
***
**
*
该函数不能使用任何类型的循环(for,while,do-while)来完成其工作。该函数应该调用printStars来完成打印单行的任务。
我相信基本情况已经解决了。这是我的代码:
def printTriangle(n):
if n == 1:
printStars(n)
我需要帮助找出递归步骤。我认为它使用n-1作为参数,但我不确定如何正确调用printTriangle函数。提前谢谢。
答案 0 :(得分:3)
递归通过将以n
为特征的问题实例减少为以n-1
为特征的实例来实现。要有限,它必须在某个实例n0
停止。
对于此问题,n
是字符串的长度。
f
时,如果您有一些可以处理打印所需长度为n-1
的字符串的函数,您只需打印一个星号然后调用该函数。诀窍是这个函数是函数f
本身。
对于长度为0
的字符串,您不打印任何内容并返回。这将产生一个递归函数f
,在调用n
时打印一串f(n)
个星号。
接下来,您通过提供一些函数g
来处理三角形。
0
调用它,它将返回并且不执行任何操作。
否则,它将使用f(n)
打印一行,然后打印换行符
然后用参数n-1
调用自己。 g(5)
的调用应打印示例三角形。
您应该使用问题文本中较长的名称来表示这些功能。
答案 1 :(得分:3)
我们以n=5
为例。一个5行三角形
***** # 5 stars ...
**** # ...followed by a 4-row triangle
***
**
*
只是一排5星,可以printStars(5)
打印,后面跟一个4行三角形,可以printTriangle(4)
打印。同样,4排三角形只是一排4星,后面是3排三角形。通常,n
- 行三角形只是一行n
个星形,后跟一个n-1
- 行三角形。正如一位古老的大学教授过去常常告诉我们的,“相信你的递归”,他的意思是,在写printTriangle
时,假设printTriangle
能正常工作并尽可能地使用它。您打印n
- 行三角形,打印一行n
星号printStars(n)
,然后是n-1
- 行三角形printTriangle(n-1)
。这意味着基本情况更简单:对于n=0
,什么都不做!否则,打印一行n
星,然后递归到后面的较小三角形上。
def printTriangle(n):
if n == 0:
# Base case
return
else:
# Recursive case
printStars(n)
printTriangle(n-1)
答案 2 :(得分:1)
打印n个星星,将n减少1,重复直到n = 0
def printTriangle(n):
if n > 0:
printStars(n)
printTriangle(n-1)
此函数一直调用自身,直到n为0
答案 3 :(得分:1)
def printTriangle(n):
if n > 0:
printStars(n)
printTriangle(n-1)
答案 4 :(得分:1)
该函数打印n
个星号,然后通过使用参数n - 1
调用自身来减少。所以基本情况应该是n
等于1,因为再进一步递减它是不合逻辑的。仅当n
大于1时才会发生减少。
所以在伪代码中它出现了:
function pstars(n)
printStars(n)
if (n > 1)
pstars(n - 1)
看看它如何调用自身并减少n?
Python代码中的剧透:
def printTriangle(n): printStars(n) if n > 1: printTriangle(n - 1)
答案 5 :(得分:0)
添加一个print语句或一些等价物,以使每个递归步骤打印到一个新行。
def printTriangle(n):
if n == 0:
return
if n > 0:
printStars(n)
print()
printTriangle(n-1)