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 3310(并查集判环,图的连通性,树上最长直径路径标记)
    poj 3308(最小点权覆盖、最小割)
    poj 3281(网络流+拆点)
    poj 3275(传递闭包)
    poj 3204(最小割)
    poj 3164(最小树形图)
    poj 2987(最大权闭合图+割边最少)
    poj 2455(二分+最大流)
    poj 2391(二分+最大流)
    poj 2135(最小费用最大流)
  • 原文地址:https://www.cnblogs.com/asnowwolf/p/3792287.html
Copyright © 2011-2022 走看看