Scala--递归

Scala 是运行在 Java 虚拟机(Java Virtual Machine)之上,因此具有如下特点:
1)轻松实现和丰富的 Java 类库互联互通。
2)它既支持面向对象的编程方式,又支持函数式编程。
3)它写出的程序像动态语言一样简洁,但事实上它确是严格意义上的静态语言。
4)Scala 就像一位武林中的集大成者,将过去几十年计算机语言发展历史中的精萃集于一身,化繁为简,为程序员们提供了一种新的选择。设计者马丁·奥得斯基 希望程序员们将编程作为简洁,高效,令人愉快的工作。同时也让程序员们进行关于编程思想的新的思考。

先说下编程范式:
1)在所有的编程范式中,面向对象编程(Object-Oriented Programming)无疑是最大的赢家。
2)但其实面向对象编程并不是一种严格意义上的编程范式,严格意义上的编程范式分为:
命令式编程(Imperative Programming)
函数式编程(Functional Programming)
逻辑式编程(Logic Programming)。

面向对象编程只是上述几种范式的一个交叉产物,更多的还是继承了命令式编程的基因。
3)在传统的语言设计中,只有命令式编程得到了强调,那就是程序员要告诉计算机应该怎么做。而递归则通过灵巧的函数定义,告诉计算机做什么。因此在使用命令式编程思维的程序中,是现在多数程序采用的编程方式,递归出镜的几率很少,而在函数式编程中,大家可以随处见到递归的方式。

Scala 中循环不建议使用 while 和 do … while ,而建议使用递归

求1~99999999和以及花费时间:
大概花了6s
在这里插入图片描述
递归完成计算:
大概花了7s
在这里插入图片描述
代码:

package com.amhu.yx.test1

import java.text.SimpleDateFormat
import java.util.Date

object DiGui {
  def main(args: Array[String]): Unit = {
    //输出计算前的时间
    val before: Date = new Date()
    val dateFormat: SimpleDateFormat = new SimpleDateFormat("yyyy-MM--dd HH:mm:ss")
    val date1 = dateFormat.format(before)
    println("计算前的时间:" + date1)
    var sum: BigInt = 0;
    var num: BigInt = 1;
    var max  = BigInt(99999999)

    sum = mx(num,sum)
    println(sum)
    //再次输出时间
    val after: Date = new Date()
    val date2 = dateFormat.format(after)
    println("计算后的时间:" + date2)
  }
  def mx(num: BigInt,sum:BigInt):BigInt={
    if (num <= 99999999) return mx(num+1,sum +num)
    else return sum
  }
}

使用递归求出最大值:
在这里插入图片描述

递归翻转字符串:
在这里插入图片描述
递归求阶乘:
在这里插入图片描述

递归使用的注意事项:
用递归求斐波那契额数列
在这里插入图片描述
越到后来,递归的次数越大,大概到40 个数时,就会卡住没有输出结果,我等了一分钟都没有结果就没等了。
因为fbn 中出现了重复计算:
在这里插入图片描述
尽量不要包含两个递归函数

斐波那契额数列的优化可以见:
https://blog.csdn.net/dadai_/article/details/50209511

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值