使用递归在Python中打印输出

1 投票
2 回答
3555 浏览
提问于 2025-04-17 15:58

我需要帮助,下面是我的递归代码。这个代码应该是每次打印一个 * 后面跟着一个 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)) 作为一个函数来使用)。

撰写回答