使用递归在Python中打印输出
我需要帮助,下面是我的递归代码。这个代码应该是每次打印一个 * 后面跟着一个 i,总共打印 n 次。我意识到我的基本情况可能不对,这可能是导致输出中出现字符串引号的原因。但是当我尝试把基本情况设置为返回 0 或 n 时,出现了一个错误,提示我不能把整数隐式转换成字符串。
def printPattern(n):
if n == 0:
return('')
else:
return('*' + printPattern(n-1) + 'i')
我的输出:
>>> printPattern(3)
'***iii'
我需要的输出(没有字符串引号):
>>> printPattern(3)
***iii
有什么想法吗?我是不是用错了逻辑?我应该换个思路来写代码,还是说有什么办法可以格式化输出,去掉字符串引号呢?
2 个回答
2
你的函数正在构建一个字符串并返回它。当你在交互式命令行中调用一个函数时,Python会打印出这个元素的表示形式(repr
)。对于字符串来说,repr
的结果会包含引号。
你只需要用print
来输出结果。
如果你想让你的函数自己打印结果,那就需要对它进行一些修改。最简单的方法是使用一个内部的私有函数来构建字符串,然后在最后加一个打印语句。
def printPattern(n):
def buildPattern(n):
if n == 0:
return('')
else:
return('*' + buildPattern(n-1) + 'i')
print(buildPattern(n))
顺便提一下,你可能不想在这个函数中使用递归,因为Python对递归调用的优化不太好,而且递归的深度限制也比较低(默认情况下,调用栈的高度限制大约在一千左右)。
2
你看到引号的原因可能是因为交互式命令行在显示一个 str
类型的东西。你可以试试
>>> print printPattern(3)
这样做会真正打印出这个模式,而不是仅仅返回它(或者在 Python 3 中,可以用 print(printPattern(3))
作为一个函数来使用)。