zoukankan      html  css  js  c++  java
  • 原创:Scala学习笔记(不断更新)

    Scala是一种函数式语言和面向对象语言结合的新语言,本笔记中就零散记下学习scala的一些心得,主要侧重函数式编程方面。

    1. 以递归为核心控制结构。

    实现循环处理的方式有三种:goto,for/while,递归,其中用goto实现循环已经在现代语言中被放弃,而for/while形式的结构化编程成为主流,而递归作为另一种方案,则长期只流行在函数式编程的小圈子中。

    递归被主流编程界所担心的主要是过深的调用栈,甚至以前的课堂上我们还亲自尝试过将递归改写为循环,但是现代函数式编程语言中,通过尾递归(后面会讲到)等形式,递归可以非常有效的优化其调用栈,达到和循环同等的地步。

    而解决了调用栈的问题,递归的优势就显现出来:递归具有简明的描述性。现实世界中的很多计算都具有自相似性,而这正是递归的特征。相对于循环,它不需要那么多标识变量来处理循环,而是将一个计算过程建模为一种“自相似”的计算,只要正确实现了小范围内的局部逻辑,任意范围的逻辑就可以保证被正确实现了。

    范例代码如下:

    // 牛顿法求平方根
    def sqrt(value: Double, trial: Double): Double = {
      def isGoodEnough(trial: Double): Boolean = abs(trial * trial - value) < 0.0001
      def abs(value: Double): Double = {
        if (value < 0)
          return -value
        else
          return value
      }
      println(value, trial)
      if (isGoodEnough(trial))
        trial
      else
        sqrt(value, (trial + value/trial)/2)
    }
    
    println( sqrt(2, 1))
    
  • 相关阅读:
    poj 2485 (kruskal)
    poj 1258
    poj 2253 (dijkstra 变形)
    poj 2485 (prim)
    poj 1125 (floyd)
    poj 2240 Arbitrage (floyd 变形)
    poj 3020 Antenna Placement(二分图+最小路径覆盖)
    poj 3020 Antenna Placement(二分图+最小路径覆盖)
    poj 3278 Catch That Cow (bfs 搜索)
    poj 2049 Finding Nemo(搜索)
  • 原文地址:https://www.cnblogs.com/asnowwolf/p/3792287.html
Copyright © 2011-2022 走看看