scala之尾递归实际用处1

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
 */

object DemoTest extends App {

  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]] = {
     @tailrec
     def spliteHelp(list1:List[Int],list2:List[List[Int]]):List[List[Int]]={
         if(list1 == Nil) list2
         else list1 match{
           case head::tail => head match {
             case x:Int if(x % 2==1) => spliteHelp(tail,List((head :: list2(0)),list2(1)))
             case y:Int if(y % 2==0) => spliteHelp(tail,List(list2(0),(head :: list2(1))))
           }
           case x  => x(0) match {
             case s:Int if(s % 2==1) => spliteHelp(Nil,List((s :: list2(0)),list2(1)))
             case z:Int if(z % 2==0) => spliteHelp(Nil,List((z :: list2(0)),list2(1))) 
           }
         }
    }
   spliteHelp(list,List(List.empty[Int],List.empty[Int]))
  }
  splitNum(list).map{_.reverse}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值