寫尾遞迴函式有什麼規律或技巧嗎?

時間 2021-06-03 10:51:53

1樓:海納

在設計的時候,可以先寫出迴圈版本,再把迴圈中所用到的區域性變數都變成遞迴函式的引數。這是實際開發中常用的一種辦法。

可以參考我這篇文章:知乎專欄

例如,我們寫乙個函式,計算m的n次方,使用迴圈,就寫成這樣:

public static double power1(double m, int n)

把這個函式裡用到的result, i, t 這三個區域性變數變成遞迴函式的引數,我們可以直接進行轉換:

defpow_helper(n

:Int,r

:Double,t

:Double,i

:Int):

Double

=else

}def

pow_2(m

:Double,n

:Int):

Double

=可以看到,result, i, t 這三個變數並沒有消失,邏輯也沒有發生任何變化,但是形式已經是尾遞迴形式了。這是一種在實際開發中比較實用的技巧。

專欄文章裡還有更簡潔的寫法。遇到迴圈改寫尾遞迴的時候,先寫乙個基礎版本,再看能不能更簡潔一點。我一般都是這麼幹的。

給樓盤取名有什麼技巧或者規律沒有?

辛石頭 大部分是拍腦袋想的,稍微大點的公司會有乙個產品線的延續,比如華潤的九里系列 話說其實是內部財務想的,十里洋場,取其九里 還是有文化內涵的 綠地的香頌系列 至於芸芸小開發商們?大家可以搜尋 全國三萬個樓盤名之類的檔案,然後裡面慢慢找就行了,至於文化嗎!都是人賦予的,產品本身不具備這些東西 蘆薈...

程式程式設計中,遞迴函式的成本有什麼,他的成本為什麼高?

大魔頭 諾鐵 pansz 遞迴的成本在於具體語言的實現,因為遞迴常常要儲存呼叫者的上下文。在遞迴層級較深時,這個儲存的開銷可能很高。另外遞迴通常使用函式實現,而函式呼叫通常在傳統中被認為是比較高的開銷,雖然現在很多語言的函式呼叫並不比其他邏輯的開銷更高。支援尾遞迴,tail call 之類的語言實現...

有什麼寫古代詞的技巧?

勒梅盫 1.在熟悉格律的基礎上,要懂得詩詞的節奏控制,詩和詞有所涉及。特別是詞,因為詞譜變化諸多,感覺到拍子的輕重緩急格外重要,字句長短的不同,發力點在哪,都需要格外拿捏。如果你是老玩家,一定對我說的有體會。我們學的煉字 鍊句 甚至是章法,起承轉合這些,甚至包括意象的選取,你仔細想想吧,都和 控制節...