Python 如何获取使用递归创建的直角三角形的最后X行?

Python 如何获取使用递归创建的直角三角形的最后X行?,python,Python,因此,我尝试创建两个函数(允许使用其他函数)。一种通过调用递归函数来创建整个直角三角形的方法,然后递归函数本身假定能够获取完整直角三角形的最后X行并显示它们。唯一的问题是,第一个函数(triangle())不能更改 以下是两个函数(至少到目前为止,这是我对递归函数所做的): 例如,当工作正常时: triangle(6) 会给 ****** ***** **** *** ** * 及 请给我底高为6(三角形上方)的直角三角形的最后3行,如下所示: 我不知道如何在递

因此,我尝试创建两个函数(允许使用其他函数)。一种通过调用递归函数来创建整个直角三角形的方法,然后递归函数本身假定能够获取完整直角三角形的最后X行并显示它们。唯一的问题是,第一个函数(triangle())不能更改

以下是两个函数(至少到目前为止,这是我对递归函数所做的):

例如,当工作正常时:

triangle(6)
会给

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

请给我底高为6(三角形上方)的直角三角形的最后3行,如下所示:


我不知道如何在递归方法中使用n和k之间的关系来实现所需的适当间距。

我想这就是您想要的

print( (n-k) * ' ' + k * "*")

我想这就是你想要的

print( (n-k) * ' ' + k * "*")

如果我理解正确,
三角形(6)
应该显示一个6行高的三角形。我猜想,这也意味着
三角形(3)
应该显示一个3行高的三角形,正如您在示例中所示,因此无需更改任何内容(在设置中),您只需编写
递归_三角形()
功能正确,从
n
中减去
k
,然后将其发送到另一个功能进行实际打印

<> P>但是,我想你还是要考虑“整个”三角形,但不要打印更高的线条,而不是:

*** ** * 现在,如果您调用
recursive\u triangle(3,6)
,您将得到您想要的东西(并且它还将正确地打印
triangle()
中的延迟调用)

更新:如果要返回字符串而不是打印,请将结果存储在
列表
中,然后用新行连接,即:

def recursive_triangle_builder(k, n):
    result = []
    if k > 0:
        result.append(("*" * k).rjust(n))
        result += recursive_triangle_builder(k-1, n)
    return result

def recursive_triangle(k, n):
    return "\n".join(recursive_triangle_builder(k, n))

print(recursive_triangle(3, 6))  # or store the result instead of printing

如果我理解正确,
三角形(6)
应该显示一个6行高的三角形。我猜想,这也意味着
三角形(3)
应该显示一个3行高的三角形,正如您在示例中所示,因此无需更改任何内容(在设置中),您只需编写
递归_三角形()
功能正确,从
n
中减去
k
,然后将其发送到另一个功能进行实际打印

<> P>但是,我想你还是要考虑“整个”三角形,但不要打印更高的线条,而不是:

*** ** * 现在,如果您调用
recursive\u triangle(3,6)
,您将得到您想要的东西(并且它还将正确地打印
triangle()
中的延迟调用)

更新:如果要返回字符串而不是打印,请将结果存储在
列表
中,然后用新行连接,即:

def recursive_triangle_builder(k, n):
    result = []
    if k > 0:
        result.append(("*" * k).rjust(n))
        result += recursive_triangle_builder(k-1, n)
    return result

def recursive_triangle(k, n):
    return "\n".join(recursive_triangle_builder(k, n))

print(recursive_triangle(3, 6))  # or store the result instead of printing


是否可以使用递归_triangle()的两个调用,其中只需要1个参数<代码>递归三角(3)和
递归三角(6)
。任何三角形的最后x行都只是一个具有x高度的三角形,它不就是调用
三角形(3)
?如果是这种情况,您只需从
n
中减去
k
,即可得到三角形的最终长度。现在,关于如何打印它,以及为什么要首先使用递归,这是一个完全不同的问题。@zwer调用三角形(3)不是一回事吗?另外,在这里使用递归,因为我被告知使用递归作为问题的一部分。@MJames28-
recursive\u三角形(3,6)
应该准确显示
trangle(3)
应该显示的内容,对吗?@zwer没错!那么你是说我应该从n中减去k,确切地说,在哪里?你能使用两个递归的_triangle()调用,其中只需要1个参数吗<代码>递归三角(3)和
递归三角(6)
。任何三角形的最后x行都只是一个具有x高度的三角形,它不就是调用
三角形(3)
?如果是这种情况,您只需从
n
中减去
k
,即可得到三角形的最终长度。现在,关于如何打印它,以及为什么要首先使用递归,这是一个完全不同的问题。@zwer调用三角形(3)不是一回事吗?另外,在这里使用递归,因为我被告知使用递归作为问题的一部分。@MJames28-
recursive\u三角形(3,6)
应该准确显示
trangle(3)
应该显示的内容,对吗?@zwer没错!你是说我应该从n中减去k,具体在哪里?我知道。这个网站打印错了我的复制粘贴,现在不允许我编辑。它应该是打印的((n-k)*''+k*“*”),我知道。这个网站打印错了我的复制粘贴,现在不允许我编辑。它应该是print((n-k)*''+k*“*”),如果我想返回所需的结果而不是print,我将如何执行此操作?因为如果将print替换为return,则不会调用递归_triangle(),因为函数位于return语句之后。例如,当返回时,它将类似于“***\n***\n***\n*\n”,如果我打印函数调用,它将显示三角形。我相信问题需要它,因此当调用三角形(4)时,得到的是“***\n***\n***\n*\n”,当调用print(三角形(4))时,它显示实际的三角形。这会改变功能的设计吗?非常感谢您的解释。@MJames28-然后创建一个单独的函数来构建三角线,并推迟对它的
recursive\u triangle()
调用。再次检查更新。如果我想返回所需的结果而不是打印,我将如何执行此操作?因为如果将print替换为return,则不会调用递归_triangle(),因为函数位于return语句之后。例如,返回时类似于“******\n***\n***\n*\n”,如果我打印函数调用,它将显示三角形
def recursive_triangle(k, n):
    if k > 0:
        print(("*" * k).rjust(n))
        recursive_triangle(k-1, n)
def recursive_triangle_builder(k, n):
    result = []
    if k > 0:
        result.append(("*" * k).rjust(n))
        result += recursive_triangle_builder(k-1, n)
    return result

def recursive_triangle(k, n):
    return "\n".join(recursive_triangle_builder(k, n))

print(recursive_triangle(3, 6))  # or store the result instead of printing