递归函数

就是函数自己调用自己

举个例子,阶乘:

package main

import "fmt"

// 3! = 3*2*1 = 3*2!
// 4! = 4*3*2*1 = 4*3!
// 5! = 5*4*3*2*1 = 5*4!

func f1(n int) int {
  if n <= 1 {
    return 1 //程序退出条件
  }
  return n * f1(n-1)
}

func main() {
  ret := f1(5)
  fmt.Println(ret)
}

递归一定要有一个确定的退出条件,递归时候处理那种问题相同,问题的规模越来越小的场景

上台阶问题

n个台阶,一次可以走一步,也可以走两步,有多少种走法

package main

import "fmt"

//n个台阶,一次可以走一步,也可以走两步,有多少种走法

func taijie(n int) int {
  if n == 1 {
    return 1
  }
  if n == 2 {
    return 2
  }
  //这两个if是判断最后一步是几种走法
  return taijie(n-1) + taijie(n-2) //-1是都一步一步的走,-2是两步两步的走
}

func main() {
  ret := taijie(20)
  fmt.Println(ret)
}

posted @ 2023-02-08 20:58  suknna  阅读(29)  评论(0)    收藏  举报