【算法小题 go程序版】递归练习 -- 猴子吃桃问题

注:

本系列所有题解都用go实现,主要go方便,想要其他版本的实现关注并私信博主。

题目

有一堆桃子,猴子第一天吃了其中一半,并再多吃了一个,以后每天猴子都吃其中一半,并多吃一个,到了第十天猴子发现只剩一个桃子了,问猴子最开始有多少个桃子?

题解与程序实现

我们假设初始总有m个桃,假设天数为n最后一天桃为f(n == 10) == 1个,第n天的桃个数等于其前一天的个数减去其一半再减1,f(n -1) - (f(n-1)/2 + 1) = f(n),也即 f(n-1) / 2 - 1那么我们可以写出:f(n) = f(n-1)/2 - 1

package main
import (
    "fmt"
)

func calc_tao(n int) int {
   
    if n == 10 {
   
        return 1
    }
    if n > 0 {
   
         // calc_tao(n) = calc_tao(n - 1)/2 - 1 
         ret = (calc_tao(n + 1) + 1) * 2
         fmt.Printf("ret:%d, n:%d", ret, n)
    }
}

func main() {
   
    // 求哪天的就传哪天,第一天传1,求第三天的穿第三天
    ret := calc_tao(1)
    fmt.Printf("get 1st day tao num:%d", ret)
}

有人估计想要非递归的实现,我这里也将伪代码写出来,补充就当你自己的小练习了。非递归可以有多种写法,用栈、队列、list甚至一个额外的变量都可以实现

// 用一个变量实现
func calc_tao(n) int {
   
    m := 10
    tao_num := 1
    for m > n {
   
        m--
        tao_num = (tao_num + 1) * 2
    }
    return tao_num
}
// 用一个栈实现,实际上这里没必要
func calc_tao(n) int {
   
    m := 10
    tao_num := 1
    stack_t tao_stack
    tao_stack.push_back(tao_num)
    for m > n && !tao_stack.empty() {
   
        m--
        local_tao_num := tao_stack.pop_front()
        tao_stack.push_back((local_tao_num + 1) * 2)
    }
}

相关推荐

  1. 算法 go程序练习 -- 猴子问题

    2023-12-20 05:20:02       40 阅读
  2. ZZULIOJ 1054: 猴子

    2023-12-20 05:20:02       36 阅读
  3. 笔记:Python猴子

    2023-12-20 05:20:02       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-20 05:20:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-20 05:20:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-20 05:20:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-20 05:20:02       20 阅读

热门阅读

  1. 链式表的实现

    2023-12-20 05:20:02       32 阅读
  2. Docker使用7-Use Docker Compose

    2023-12-20 05:20:02       56 阅读
  3. 【嵌入式面试】嵌入式经典面试题汇总(C语言)

    2023-12-20 05:20:02       34 阅读
  4. Python基础dict字典定义与函数

    2023-12-20 05:20:02       38 阅读
  5. 【SpringBoot实战】基于MybatisPlus实现基本增删改查

    2023-12-20 05:20:02       52 阅读
  6. 【安全】audispd调研

    2023-12-20 05:20:02       39 阅读
  7. C#连接数据库40错误

    2023-12-20 05:20:02       39 阅读
  8. 64道Go机制高频题整理(附答案背诵版)

    2023-12-20 05:20:02       42 阅读