2017-05-01 78 views
0

我为递归三角赋值写了这段代码。我已经接受了调整我的代码以仅返回由新行加入的单个字符串的挑战。递归python三角形加入新行

def triangle(n): 
    if n <= 0: 
     return "" 
    p = triangle(n-1) 
    p = p + "*" 
    print(p) 
    return p 

triangle(5) 

我想获得它返回 “* \ n ** \ n *** \ n **** \ n *****”

我只是有一个很难做出我需要的改变。

+0

要打印'\ n'原样还是换行? –

回答

0

你可以使用python中字符串可以相乘(重复连接)的事实。

def triangle(n): 
    return '\n'.join(['*'*i for i in range(1,n+1)]) 
+0

我看到我的一些答案启发了你的修改^ _ ^尼斯工作 – naomik

1

如果你只是想返回一个字符串,你必须从你的函数中删除print调用。顺便说一句,写一般递归函数的时候,你可以/应避免变量重新分配

def triangle (n): 
    if n == 0: 
    return "" 
    else: 
    return triangle (n - 1) + ("*" * n) + "\n" 

print(triangle(5)) 
# * 
# ** 
# *** 
# **** 
# ***** 
# 

这并导致在字符串的结尾尾\n虽然。如果你想避免这种情况,你必须写一个附加的情况下,当n == 1

def triangle (n): 
    if n == 0: 
    return "" 
    elif n == 1: 
    return "*" 
    else: 
    return triangle (n - 1) + "\n" + ("*" * n) 

print(triangle(5)) 
# * 
# ** 
# *** 
# **** 
# *****   

否则,另一种方式是建立三角行的列表,并使用"\n".join插入各行之间的换行符

def triangle (n): 
    def aux (acc, n): 
    if n == 0: 
     return acc 
    else: 
     return aux (["*" * n] + acc, n - 1) 
    return "\n".join(aux([], n)) 

print(triangle(5)) 
# * 
# ** 
# *** 
# **** 
# ***** 
+0

谢谢。看起来我现在必须对辅助帮手进行一些阅读。 – wazawai

+0

@wazawai这是一个非常通用的搜索 - 简单地说,一个*辅助*功能是一个只用于另一个功能来完成特定任务 - 我们不希望用户手动调用我们的辅助功能 - 这就是为什么'aux'被定义在'triangle'的*里面,所以只有'triangle'有权使用它 – naomik