递归函数(1)

85 阅读1分钟

一.定义

1. 自己调用自己的函数,可能会产生死循环

2. 适合解决一类问题

1. 可以被分解为类似子问题
2. 当分解到足够小的时候,问题可以直接求解
3. 通项公式: (n)=1+2+3+.....+n--->f(n)=f(n-1)+n
//定义函数
  def f():Unit = {
  println("f....被调用了")

    f()//调用函数
  }
def main(array: Array[String]):Unit = {
  f()
  println("over")
}
  • 题1:1+2+3+.....+n
  if (n == 1) {
    1
  } else {
    f(n - 1) + n
  }
}
  def main(array: Array[String]): Unit = {
    val rst = f(4)
    println(rst)
  }
  • 题2:阶乘n!=123*...*n
def f(n: Int): Int = {
  if (n == 1) {
    1
  } else {
    f(n - 1) * n
  }
}
  def main(array: Array[String]): Unit = {
    val rst = f(4)
    println(rst)
  }
  • 题3:斐波那契数列/黄金分割率/兔子算法--->f(n)=f(n-1)+f(n-2)
def f(n: Int): Int = {
  if (n == 1) {
    1
  } else if(n == 2){
    2
  }else {
    f(n - 1) + f(n-2)
  }
}
  def main(array: Array[String]): Unit = {
    val rst = f(10)
    println(rst)
  }
  • 题4:把输入的整数的各个位数上的数值输出!
 def f(n: Int): Unit = {
    if (n < 9) {
      println(n)
    } else {
      f(n / 10)
      println(n % 10)
    }
  }

  def main(array: Array[String]): Unit = {
    f(123456789)
  }
}
  • 题5:按数字大小依次叠加,找出移动次数最少的解法(从A柱移动到C)
 def f(n: Int,A:Char,B:Char,C:Char): Unit = {
    if (n == 1) {
      println(s"${A}---->${C}")
    } else {
      f(n-1,B,A,C)
      println(s"${A}---->${C}")
      f(n-1,B,A,C)
    }
  }

  def main(array: Array[String]): Unit = {
    f(4,'A','B','C')
  }
}