1

我正在尝试创建一个如下所示的三角形:

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

不使用 while、for in、列表等。只是“if-else”案例和递归函数。我刚刚学会了如何做一个星号三角形。

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

triangle(6)

它与我想应用于我的练习的想法相同,但我真的不知道如何处理逐个更改术语的代码并将它们全部打印到右侧,就像这个一样。

4

4 回答 4

2

这是我的解决方案。请注意,既没有range也没有join,这意味着forlist

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

如果range可以接受,那么这里是一个简短的:

def tri2(size):
    row = map(str, range(1, size + 1))
    print '\n'.join(map(lambda n: ' '.join(row[n:]), range(size)))
于 2013-05-13T05:02:48.883 回答
0

您可以使用range()orxrange()获取数字列表,并在每次递归时减小范围:

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 )

输出:

>>> 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
于 2013-05-13T04:49:46.097 回答
0

我建议这样的事情:

def triangle(i, t = 1):
    if i > 0:
        print ' '.join([str(n+t) for n in range(i)])
        triangle( i - 1, t + 1 )

range为您提供每个级别所需的数字列表,并且偏移t量增加一,因此您在每个级别都从更高的值开始。

更新

我刚刚注意到您对 nofor in和 lists 的要求,这可能会使上面的示例出错。所以这是另一个只使用递归的建议:

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)
于 2013-05-13T04:58:42.960 回答
0

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

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)
于 2013-05-13T05:05:28.627 回答