2014-06-06 45 views

回答

1

遞歸解決方案:

func applyKTimes(f:(Float -> Float), x:Float, k:Int) -> Float 
{ 
    return k > 0 ? applyKTimes(f, f(x), k - 1) : x 
} 

如果斯威夫特保證尾調用優化的我沒有檢查。如果是這樣,那麼遞歸解決方案就是你真正想要的。但是,如果沒有,則需要手動展開以避免堆棧出現問題。

相同,但通過手展開:

func applyKTimes(f:(Float -> Float), x:Float, k:Int) -> Float 
{ 
    var result = x 
    for _ in 0..k { 
     result = f(result) 
    } 
    return result 
} 
+0

這並不編譯。你需要一個':'和一個'else'子句。 –

+0

Xcode錯誤'預期':'之後'? ......'三元表達式' – Carpsen90

+0

是的,對不起。我打得太早,我沒寫完。我糾正了這個問題,並用展開的版本完成了答案。告訴我是否仍然有問題:我沒有這裏的Swift編譯器,所以我會深思熟慮。 –

4

如果你不想使用遞歸:

func applyKTimes(f:(Float -> Float), x: Float, k: Int) -> Float { 
    var result = x 
    for _ in 0..k { 
     result = f(result) 
    } 
    return result 
} 
+0

這個工作,有遞歸的解決方案嗎? – Carpsen90

+0

是的,請參閱@Analog File的回答 –

+0

是的。太糟糕了,我在寫完文章之前打了帖子,哈哈 –

相關問題