我正在尝试创建一个如下所示的三角形:
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)
我有同样的想法,我想应用于我的练习,但我真的不知道如何处理代码来逐个更改术语,并将它们全部打印到这样的右边。
答案 0 :(得分:2)
这是我的解决方案。请注意,既没有range
也没有join
,这意味着for
或list
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)