fp的map函式是核心部分,採用分而治之,講究以單元的方式處理資料,所以在一些「關聯資料」處理時就不能直接map處理了,最好的方式是採用命令程式設計方式處理,或者在map中產生side-effect(不過很少怎麼做的,fp函式講究最大層次的pure),下面我們使用尾遞迴處理
下面是根據我的思路來寫題目,可能最好方式不是尾遞迴,但將就著用吧
實現對偶分組:建議自己思考後再參考我的答案
val list:list[int] = list(1,2,2,3,4,43,23,11,2,6,7,78,9)
//目的-將list內的資料按奇偶分開,
//reault => list2 = list(list(1,3,43,23,11,7,9),list(2,2,4,2,6,78)) ---****按照前後順序分開
我的答案
package com.org
import scala.annotation.tailrec
/** * @author administrator
*/ val list:list[int] = list(1,2,2,3,4,43,23,11,2,6,7,78,9)
//目的-將list內的資料按奇偶分開,
//reault => list2 = list(list(1,3,43,23,11,7,9),list(2,2,4,2,6,78)) -----按照順序分開
def splitnum(list:list[int]):list[list[int]] =
case x => x(0) match }}
splitehelp(list,list(list.empty[int],list.empty[int]))
} splitnum(list).map
}
scala 尾遞迴優化
乙個函式直接或間接的呼叫它自己本身,就是遞迴。它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的 就可以執行多次重複的計算。一般來說,遞迴需要有邊界條件 遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進 當邊界條件滿足時,遞迴返回。以遞迴方式實現階乘函...
Scala高階之路 尾遞迴優化
scala高階之路 尾遞迴優化 遞迴呼叫有時候能被轉換成迴圈,這樣能節約棧空間。在函式式程式設計中,這是很重要的,我們通常會使用遞迴方法來遍歷集合。而不是所有的遞迴都能被優化。遞迴之所有能被優化是在指在函式的最後一行為遞迴呼叫 即尾遞迴 並且這個遞迴呼叫沒有其它元素參與。一.什麼情況能導致棧的溢位 ...
scala隱式轉換 尾遞迴
隱式轉換 隱式轉換呼叫類中本不存在的方法 class swingtype object swimming class aminaltype import swimming.learningtype object implicitdemo class swing type package swimmi...