scala函数递归应用案例

示例:

object Demos01 {
 //一个函数在函数体内又调用了本身,我们称为递归调用
  def main(args: Array[String]): Unit = {
//    test(4)
    test2(4)  //输出
  }
  def test (n: Int): Unit ={
    if(n > 2){
      test(n - 1)
    }
    println("n=" + n)
  }
  def test2 (n: Int): Unit ={
    if (n > 2) {
      test2 (n - 1)
    }else{
      println("n=" + n)
    }
  }
}

总结:
1 程序执行一个函数时,就创建一个新的受保护的独立空间(新函数栈)
2 函数的局部变量是独立的,不会相互影响
3 递归必须向退出递归的条件逼近,否则就是无限递归,死"龟"了
4 当一个函数执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁。

案例1 斐波那契数 请使用递归的方式,求出斐波那契数1,2,3,5,8,13… 给你一个整数n,求出它的斐波那契数是多少?
分析
1 当n=1结果为1
2 当n=2结果为1
3 当n>2时,结果就是前两个数的和

object Exercise01 {
  def main(args: Array[String]): Unit = {
    println(f(2))
  }

  def f(n:Int): Int ={
    if(n == 1){
      3
    }else{
      2 * f(n-1) + 1
    }
  }
}

案例2 求函数值 已知f(1)=3; f(n)=2*f(n-1)+1; 请使用递归的思想编程,
求出f(n)的值

object Exercise01 {
    def main(args: Array[String]): Unit = {
       println(f(2))
  }
    def f(n:Int): Int ={
    if(n == 1){
      3
    }else{
      2 * f(n-1) + 1
    }
  }
}

案例3 猴子吃桃子问题:有一堆桃子,猴子第一天吃了其中的一半,并再多吃了一个!以后每天猴子都吃其中的一半,然后再多吃一个,当到第十天时,想在吃时(还没吃),发现只有1个桃子了,问题:最初共有多少个桃子?

分析思路:
1 day = 10 桃子有1
2 day = 9 桃子有 (day10[1] + 1)*2)
3 day = 8 桃子有(day9[4]+1)*2

object Exercise01 {
  def main(args: Array[String]): Unit = {
    println("桃子个数=" + peach(1))  //1534
  }
  def peach(day:Int): Int ={
    if(day == 10){
      1
    }else{
      (peach(day + 1) + 1) * 2
    }
  }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值