Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何使用递归生成数字三角形_Python_Function_Recursion - Fatal编程技术网

Python:如何使用递归生成数字三角形

Python:如何使用递归生成数字三角形,python,function,recursion,Python,Function,Recursion,在进行Python实践时,我发现了一个我自己无法解决的问题。 问题是, 输入一个整数(n),然后写出用1到n组成三角形的代码。使用下面的图片。您应该只创建一个函数,并多次调用该函数来解决问题。下图是您应该在代码中生成的结果。 接收一个整数作为参数,在单行中打印从1到作为因子接收的整数的数字,然后在末尾打印换行符。调用此函数后,只应打印一行输出。 通过这个问题,我发现这是一个需要 递归,因为我只需要调用你的函数一次。 我曾多次尝试编写代码,但都无法解决 global a a = 1 def p

在进行Python实践时,我发现了一个我自己无法解决的问题。 问题是,

输入一个整数(n),然后写出用1到n组成三角形的代码。使用下面的图片。您应该只创建一个函数,并多次调用该函数来解决问题。下图是您应该在代码中生成的结果。 接收一个整数作为参数,在单行中打印从1到作为因子接收的整数的数字,然后在末尾打印换行符。调用此函数后,只应打印一行输出。

通过这个问题,我发现这是一个需要 递归,因为我只需要调用你的函数一次。 我曾多次尝试编写代码,但都无法解决

global a
a = 1

def printLine(n):
 global a
 if (n == 0):
     return

 for i in range(1, a + 1):
 print(i, end=" ")
 print()
  a += 1

 for k in range(1, n+1):
     print(k, end=" ")
 print()

 printLine(n - 1)

 n = int(input())
 printLine(n)
然后我写了一些代码来解决这个问题,但是上升部分和下降部分是重叠的( 我需要做的是在一个函数中分开两个升序部分和降序部分,但是我真的找不到我该怎么做。那么我应该把递归函数调用放在哪一部分呢? 或者是否有其他方法可以划分函数中的升序部分和降序部分? 欢迎提出任何想法、意见或解决方案。
Thx

您可以使用以下功能:

def create_triangle(n, k: int = 1, output: list = []):
    if n == 1:
        output.append(n)
        return output
    elif k >= n:
        output.append(" ".join([str(i) for i in range(1, n + 1)]))
        return create_triangle(n - 1, k)
    else:
        output.append(" ".join([str(i) for i in range(1, n + 1)[:k]]))
        return create_triangle(n, k + 1)


for i in create_triangle(5):
    print(i)
输出:

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1

使用默认参数作为dict,您可以将其作为函数变量进行操作,这样,您的函数中就可以有一个变量来保持当前迭代以及函数是升序还是降序

def triangle_line(n, config={'max':1, 'ascending':True}):
    print(*range(1, config['max'] + 1))

    if config['ascending']:
        config['max'] += 1
    else:
        config['max'] -= 1

    if config['max'] > n:
        config['ascending'] = False
        config['max'] = n
    elif config['max'] == 0:
        config['ascending'] = True
        config['max'] = 1
每次调用都将返回一次迭代

>>> triangle_line(4)
1
>>> triangle_line(4)
1 2
>>> triangle_line(4)
1 2 3
>>> triangle_line(4)
1 2 3 4
>>> triangle_line(4)
1 2 3 4
>>> triangle_line(4)
1 2 3
>>> triangle_line(4)
1 2
>>> triangle_line(4)
1
或者你可以在一个循环上运行,两倍于你的输入大小

>>> n = 4
>>> for i in range(0,n*2):
...     triangle_line(n)
... 
1
1 2
1 2 3
1 2 3 4
1 2 3 4
1 2 3
1 2
1

..只要一个循环就可以。@jizhaosama我知道我可以使用循环,但问题是我应该多次调用该函数并使用单个函数。..你能更好地格式化你的代码吗?我不能很好地复制它。@FarhoodET global a'''global a a a a=1 def printLine(n):global a if(n==0):返回范围(1,a+1)中的i:print(i,end=”“)print()范围(1,n+1)中的k:print(k,end=“”)print()print()printLine(n-1)n=int(input())printLine(n)“”
>>> n = 4
>>> for i in range(0,n*2):
...     triangle_line(n)
... 
1
1 2
1 2 3
1 2 3 4
1 2 3 4
1 2 3
1 2
1