使用递归的Python打印输出

时间:2013-02-15 09:27:10

标签: python recursion

我需要帮助下面的递归代码。代码假设打印出*后跟每个n的i。我意识到我的基本情况可能是不正确的,并且它可能是输出中字符串引号的原因,但是当我尝试将基本情况设置为返回0或n时,我得到错误声明我无法将整数转换为字符串含蓄。

def printPattern(n):  

    if n == 0:
        return('')
    else:
        return('*' + printPattern(n-1) + 'i')

我的输出:

>>> printPattern(3)  
'***iii'

我需要的输出(没有字符串引用):

>>> printPattern(3)  
***iii

有什么想法吗?我在这里使用错误的逻辑吗?我是否应该使用我的代码走另一条路径,或者无论如何我可以格式化输出以删除字符串引用?

2 个答案:

答案 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不优化递归调用,并且具有相当低的递归限制(默认情况下,调用堆栈限制为大约一千个左右)。