2015-05-25 40 views
4

我想寫一個樹生長算法,其中樹每年經歷2個週期的增長。第一個生長週期發生在春季,當時它的高度加倍。第二個生長週期發生在夏季,其高度增加1米。樹生長算法

我現在的問題是,現在,一棵新的樹種植在春天的開始。它的高度是1米。我想在N個生長週期後找到樹的高度?

我正在做一些關於遞歸函數的研究,其中函數調用它自己。我在這裏讓你編寫的代碼更優雅,更簡單,然後循環。我有問題,執行該功能雖然

n = input('How long would you like the tree to for?: ') 


def cycle(n): 
if n == 0: 
    n = + 1 
    return n 
    print '/n' # The reason for all the '/n' is just for neatness. 
    print('The tree will be ' + n + 'Ft tall') 

elif n % 2 == 0: 
    n = 1 + cycle(n - 1) 
    return n 
    print '/n' 
    print('The tree will be ' + n + 'Ft tall') 

elif n % 2 != 0: 
    n = 2 * cycle(n - 1) 
    return n 
    print '/n' 
    print('The tree will be ' + n + ' Ft tall') 

cycle(n) 
+0

什麼是n?週期數或其高度?另外,由於您在打印之前返回,所以'print's不起作用。 – Lafexlos

+0

該計劃是讓'n'多久你會希望這棵樹多年生長。但1年= 2個週期。夏季樹木生長+ 1米,樹木* 2高度的春天。 –

+0

你正在從用戶那裏得到最終高度,所以你想要返回什麼?樹會在多少個週期內達到/接近該高度('n')?在OP中,你說「我想在N次增長週期後找到樹的高度」,但是在代碼中,你正在獲得高度本身,這導致了一些混淆 - 至少對我而言。 – Lafexlos

回答

0

你的變量ň還合併了與經濟增長的週期樹的高度。你應該爲不同的測量實例化不同的變量!此外,n正在堆棧的所有級別進行修改,可能會導致錯誤的輸出。

遞歸調用可以使算法更優雅,但它們也幾乎總是比非遞歸解決方案更不直觀。我對初學者的建議是迭代地解決問題,然後將迭代算法轉換爲遞歸形式。