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

news/2024/6/17 18:40:11 标签: 算法, golang

注:

本系列所有题解都用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)
    }
}


http://www.niftyadmin.cn/n/5273454.html

相关文章

前端面试题(计算机网络):GET和POST的请求的区别是什么?

声明:什么是幂等请求?答:不管对同一资源请求多少次返回的结果都相同 Post 和 Get 是 HTTP 请求的两种方法,其区别如下: 应用场景: GET 请求是一个幂等请求,一般 Get 请求用于对服务器资源不会…

2023年12月19日历史上的今天大事件早读

1280年12月19日 元朝颁行著名天文学家郭守敬的《授时历》 1893年12月19日 清洋务运动首领李鸿章在天津开办医学堂 1903年12月19日 《中国白话报》在上海创刊 1912年12月19日 荣氏兄弟创立福新面粉公司 1916年12月19日 凡尔登战役宣告结束 1945年12月19日 越南、老挝、柬埔…

智能优化算法应用:基于适应度相关算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于适应度相关算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于适应度相关算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.适应度相关算法4.实验参数设定5.算法…

【pandas 将二维表转换成一维】

import pandas as pd # 假设df是您的DataFrame df pd.DataFrame({ 日期: [45219, 45219, 45219, 45219, 45219, 45219], 一级渠道: [站外付费, 站内免费, 站内免费, 站内免费, 站内付费, 站内免费], 二级渠道: [京东扶持, 搜索, 购物车, 我的, 站内付费-商家付费, 商品]…

HTML_CSS的基本选择器的使用及其作用范围和优先级

目录 ✨CSS的使用:行内样式内部样式外部样式 ✨CSS基本选择器:id选择器class选择器标签选择器 ✨优先级:选择器的优先级样式表的优先级 ✨CSS的使用: 根据定义CSS的位置不同,分为行内样式、内部样式和外部样式 行内样…

win环境下启动kafka Port already in use: 6688; nested exception is

背景 zk启动成功后,接下来启动kafka,再启动kafka后一直说端口被占用。 端口占用解决办法: netstat -aon|findstr 9092 taskkill -f -pid 7780 杀掉后,再次启动kafka时,问题并未解决 后来修改了批处理文件kafka-run-class.bat中…

区间DP(合并石子)的笔记

总是从最后一步进行分析&#xff1a;最后一次合并一定是左边连续的一部分和右边连续的一部分进行合并。 f[i][j]表示为从编号i到编号j合并完成为一堆的最小代价。 当i < j时&#xff0c;f[i][j] min(f[i][j], f[i][k] f[k 1][j] s[j] - s[i - 1]);&#xff08;因为是最…

TypeScript【可选属性、只读属性、额外的属性检查、函数类型、类类型、继承接口】(四)-全面详解(学习总结---从入门到深化)

文章目录 接口_可选属性 接口_只读属性 接口_额外的属性检查 接口_ 函数类型 接口_类类型 接口_继承接口 接口_可选属性 接口里的属性不全都是必需的。 有些是只在某些条件下存在&#xff0c;或者根本不存在。 可选属性在应用 “option bags” 模式时很常用&#xff0c;即…