2017-05-01 75 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