【问题标题】:print the pattern using recursion使用递归打印模式
【发布时间】:2023-01-20 23:00:32
【问题描述】:

我想要打印下面的图案使用递归并且不必(严格)使用任何循环。

* * * * * * * * * * * * * * 
* * * * * *     * * * * * *
* * * * *         * * * * *
* * * *             * * * *
* * *                 * * *
* *                     * *
*                         *
* *                     * *
* * *                 * * * 
* * * *             * * * *
* * * * *         * * * * *
* * * * * *     * * * * * *
* * * * * * * * * * * * * *

我没有使用递归就做到了

n = 7
for i in range(n,0,-1):
    for j in range(i,0,-1):
        print("*",end=" ")
    for j in range(2*(n-i)):
        print(" ",end=" ")
    for j in range(i,0,-1):
        print("*",end=" ")
    print()

for i in range(1,n):
    for j in range(i+1):
        print("*",end=" ")
    for j in range(2*(n-i-1)):
        print(" ",end=" ")
    for j in range(i+1):
        print("*",end=" ")
    print()

谁能帮忙打印相同的图案使用递归而不使用任何循环(严格)

我试过使用递归但无法正确打印它并且无法进一步可视化代码 使用递归的代码:

def print_pattern(n, row=0):
    if row == n:
        return
    print("* "*(n - row) + "  "*(2*row) + "* "*(n - row))
    print_pattern(n, row + 1)
    if row != 0:
        print("* "*(n - row) + "  "*(2*row) + "* "*(n - row))

n = 5
print_pattern(n)

【问题讨论】:

    标签: python recursion


    【解决方案1】:

    如果模式始终保持不变,您可以使用 var ='''pattern''' 将其保存在变量中

    在这种情况下,它看起来像这样:

    pattern = '''* * * * * * * * * * * * * * 
    * * * * * *     * * * * * *
    * * * * *         * * * * *
    * * * *             * * * *
    * * *                 * * *
    * *                     * *
    *                         *
    * *                     * *
    * * *                 * * * 
    * * * *             * * * *
    * * * * *         * * * * *
    * * * * * *     * * * * * *
    * * * * * * * * * * * * * *'''
    
    print(pattern)
    

    【讨论】:

    • 模式是相同类型的,唯一不同的是没有用户输入的行和列
    【解决方案2】:

    仅使用 row != -1 您的代码将正常工作

    def print_pattern(n, row=0):
        if row == n:
            return
        print("* "*(n - row) + "  "*(2*row) + "* "*(n - row))
        print_pattern(n, row + 1)
        if row != -1:
            print("* "*(n - row) + "  "*(2*row) + "* "*(n - row))
    
    n = 7
    print_pattern(n)
    

    【讨论】:

    • 请把它写成一个代码块,会更容易理解,而且 n 的值不是固定的,它是用户输入的。
    • if row != -1 是多余的。 row从0开始递增。只需删除支票。
    • 它打印额外的一行
    猜你喜欢
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    相关资源
    最近更新 更多