使用递归的方式去思考、编程

Scala是一种运行在Java虚拟机上的编程语言,它融合了面向对象编程和函数式编程的特点,支持递归思想,旨在提供简洁、高效且愉快的编程体验。本文介绍了Scala的基本特性,探讨了函数式编程的优势,并通过计算1-50的和的实例对比展示了传统循环与递归的不同实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.基本介绍

    Scala 是运行在 Java 虚拟机(Java Virtual Machine)之上,因此具有如下特点:

  • 轻松实现和丰富的 Java 类库互联互通。

  • 它既支持面向对象的编程方式,又支持函数式编程。

  • 它写出的程序像动态语言一样简洁,但事实上它确是严格意义上的静态语言。

  • Scala 就像一位武林中的集大成者,将过去几十年计算机语言发展历史中的精萃集于一身,化繁为简,为程序员们提供了一种新的选择。设计者马丁·奥得斯基 希望程序员们将编程作为简洁,高效,令人愉快的工作。同时也让程序员们进行关于编程思想的新的思考。

 

2.Scala 提倡函数式编程(递归思想)

  • 在所有的编程范式中,面向对象编程(Object-Oriented Programming)无疑是最大的赢家。

  • 但其实面向对象编程并不是一种严格意义上的编程范式,严格意义上的编程范式分为:命令式编程(Imperative Programming)、函数式编程(Functional Programming)和逻辑式编程(Logic Programming)。面向对象编程只是上述几种范式的一个交叉产物,更多的还是继承了命令式编程的基因。

  • 在传统的语言设计中,只有命令式编程得到了强调,那就是程序员要告诉计算机应该怎么做。 而递归则通过灵巧的函数定义,告诉计算机做什么。因此在使用命令式编程思维的程序中,是现在多 数程序采用的编程方式,递归出镜的几率很少,而在函数式编程中,大家可以随处见到递归的方式。

 

3.应用实例

    scala 中循环不建议使用 while 和 do...while,而建议使用递归。

    应用实例: 计算 1-50 的和

3.1 常规的解决方式(while 实现)

object Scala01_RecursiveDemo01 {
  def main(args: Array[String]): Unit = {


    //传统方法完成 1-50 的求和任务
    val now: Date = new Date()
    val dateFormat: SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
    val date = dateFormat.format(now)
    println("date=" + date) 
    
    var res = BigInt(0)
    var num = BigInt(1)
    var maxVal = BigInt(99999999l)
    while (num <= maxVal) {
      res += num
      num += 1
    }
    println("res=" + res)


    val now2: Date = new Date()
    val date2 = dateFormat.format(now2)
    println("date2=" + date2) //输出时间


  }
}

3.2 使用函数式编程方式(递归实现)

    函数式编程的重要思想就是尽量不要产生额外的影响,上面的代码就不符合函数式编程的思想, 下 面我们看看使用函数式编程方式来解决(Scala 提倡的方式)

object Scala02_RecursiveDemo02 {
  def main(args: Array[String]): Unit = {

    //递归实现 1-50 的求和任务
    val now: Date = new Date()
    val dateFormat: SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
    val date = dateFormat.format(now)
    println("date=" + date)


    def mx(num: BigInt, sum: BigInt): BigInt = {
      if (num <= 99999999l) return mx(num + 1, sum + num)
      else return sum
    }

    var num = BigInt(1)
    var sum = BigInt(0)
    var res = mx(num,sum)
    println("res=" + res)
    
    val now2: Date = new Date()
    val date2 = dateFormat.format(now2)
    println("date2=" + date2) //输出时间

  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员学习圈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值