python中的递归数字三角形

时间:2013-05-13 04:42:35

标签: 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,lists等。只是“if-else”情况和递归函数。我刚刚学会了如何做一个星号三角形。

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

triangle(6)

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

4 个答案:

答案 0 :(得分: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)))

答案 1 :(得分:0)

您可以使用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 )

<强>输出:

>>> 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

答案 2 :(得分: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偏移量增加了一个,因此您从每个级别的较高值开始。

<强>更新

我刚刚注意到你没有for in和列表的要求,这可能会使上面的例子错误。所以这是另一个仅使用递归的建议:

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)

答案 3 :(得分: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)