python中的递归数字三角形

python中的递归数字三角形,python,function,recursion,numeric,Python,Function,Recursion,Numeric,我试图创建一个三角形,如下所示: 1 2 3 4 5 6 2 3 4 5 6 3 4 5 6 4 5 6 5 6 6 不使用while、for in、list等,只使用“if-else”用例和递归函数。我刚刚学会了如何画一个星号三角形 def triangle(i, t=0): if i == 0: return ' ' else: print '*' * i return triangle( i - 1, t + 1 ) tr

我试图创建一个三角形,如下所示:

1 2 3 4 5 6
2 3 4 5 6
3 4 5 6
4 5 6
5 6
6
不使用while、for in、list等,只使用“if-else”用例和递归函数。我刚刚学会了如何画一个星号三角形

def triangle(i, t=0):
    if i == 0:
        return ' '
    else:
        print '*' * i
        return triangle( i - 1, t + 1 )

triangle(6)
这与我想在练习中应用的想法相同,但我真的不知道如何处理逐项更改的代码,并像下面这样将它们全部打印到右边。

您可以使用
range()
xrange()
获得数字列表,并通过每次递归减小范围:

def triangle(i, t):
    if i == t:
        return i
    else:
        print " ".join([str(x) for x in range(i,t+1)])
        return triangle( i + 1, t )
def triangle(size, col = 1, row = 1):
    if col < size:
        print col,
        triangle(size, col+1, row)
    else:
        print col
        if row < size:
            triangle(size, row+1, row+1)
输出:

>>> triangle(1,6)
1 2 3 4 5 6
2 3 4 5 6
3 4 5 6
4 5 6
5 6
6
>>> triangle(1,8)
1 2 3 4 5 6 7 8
2 3 4 5 6 7 8
3 4 5 6 7 8
4 5 6 7 8
5 6 7 8
6 7 8
7 8
8

我建议这样做:

def triangle(i, t = 1):
    if i > 0:
        print ' '.join([str(n+t) for n in range(i)])
        triangle( i - 1, t + 1 )
范围
为您提供了每个级别所需的数字列表,而
t
偏移量增加了一个,因此您从每个级别的较高值开始

更新

我刚刚注意到您对in和list的no
要求,这可能使上述示例出错。下面是另一个仅使用递归的建议:

def triangle(i, t):
    if i == t:
        return i
    else:
        print " ".join([str(x) for x in range(i,t+1)])
        return triangle( i + 1, t )
def triangle(size, col = 1, row = 1):
    if col < size:
        print col,
        triangle(size, col+1, row)
    else:
        print col
        if row < size:
            triangle(size, row+1, row+1)
def三角形(大小,列=1,行=1):
如果col<尺寸:
打印颜色,
三角形(大小,列+1,行)
其他:
打印颜色
如果行<大小:
三角形(大小,第+1行,第+1行)

这是我的解决方案。请注意,既没有
范围
也没有
连接
,这意味着
用于
列表

In [1]: def tri(size, row = 0, col = 0):
   ...:     if row < size:
   ...:         num = row + col + 1
   ...:         if num == size + 1:
   ...:             print '\n',
   ...:             tri(size, row + 1, 0)
   ...:         if num <= size:
   ...:             print num, '',
   ...:             tri(size, row, col + 1)
   ...:

In [2]: tri(6)
1  2  3  4  5  6
2  3  4  5  6
3  4  5  6
4  5  6
5  6
6

通过递归调用函数,您实现了一种循环。 现在,您可以复制相同的想法:

def OneLess(i,j):
    print i, 
    if i < j: 
        OneLess(i+1,j)
    else:
        print ""

def triangle(i, t=1):
    OneLess(t,i)#print '*' * i
    if i == t:
        return ' '    
    return triangle( i , t + 1 )

triangle(6)
def OneLess(i,j):
打印i,
如果i