我需要帮助下面的递归代码。代码假设打印出*后跟每个n的i。我意识到我的基本情况可能是不正确的,并且它可能是输出中字符串引号的原因,但是当我尝试将基本情况设置为返回0或n时,我得到错误声明我无法将整数转换为字符串含蓄。
def printPattern(n):
if n == 0:
return('')
else:
return('*' + printPattern(n-1) + 'i')
我的输出:
>>> printPattern(3)
'***iii'
我需要的输出(没有字符串引用):
>>> printPattern(3)
***iii
有什么想法吗?我在这里使用错误的逻辑吗?我是否应该使用我的代码走另一条路径,或者无论如何我可以格式化输出以删除字符串引用?
答案 0 :(得分:2)
您可能只是因为交互式shell向您显示str
类型的内容而看到引号。试试
>>> print printPattern(3)
实际上打印模式,而不仅仅是返回它(或者,在python 3中,使用print(printPattern(3))
作为函数)。
答案 1 :(得分:2)
您的函数正在构建一个字符串并将其返回。当在交互式shell中运行并调用函数时,Python将打印元素的表示(repr
)。对于字符串,repr
包含引号。
您只需要print
结果。
如果您希望您的功能进行打印,则必须对其进行修改。最简单的方法是使用内部私有函数来构建字符串,并在最后使用print语句。
def printPattern(n):
def buildPattern(n):
if n == 0:
return('')
else:
return('*' + buildPattern(n-1) + 'i')
print(buildPattern(n))
BTW,您可能不希望对该函数使用递归,因为Python不优化递归调用,并且具有相当低的递归限制(默认情况下,调用堆栈限制为大约一千个左右)。