自己怎么做 优惠券网站,哪些平台可以发布软文,统一门户网站,企业管理系统有注#xff1a;
本系列所有题解都用go实现#xff0c;主要go方便#xff0c;想要其他版本的实现关注并私信博主。
题目
有一堆桃子#xff0c;猴子第一天吃了其中一半#xff0c;并再多吃了一个#xff0c;以后每天猴子都吃其中一半#xff0c;并多吃一个#xff0c;…注
本系列所有题解都用go实现主要go方便想要其他版本的实现关注并私信博主。
题目
有一堆桃子猴子第一天吃了其中一半并再多吃了一个以后每天猴子都吃其中一半并多吃一个到了第十天猴子发现只剩一个桃子了问猴子最开始有多少个桃子
题解与程序实现
我们假设初始总有m个桃假设天数为n最后一天桃为f(n 10) 1个第n天的桃个数等于其前一天的个数减去其一半再减1f(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) * 2fmt.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 : 10tao_num : 1for m n {m--tao_num (tao_num 1) * 2}return tao_num
}
// 用一个栈实现实际上这里没必要
func calc_tao(n) int {m : 10tao_num : 1stack_t tao_stacktao_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)}
}