回家归来第一贴

做个纪念
  14号晚上9点半的回家的车,虽然汽车站人很多,但秩序都很好,工作人员态度还是很好的,路过火车站的时候被那场面给吓怕了,呵呵。车子是晚上的,所以昏昏沉沉的睡了一觉(是空调直达快吧),比较讨厌那些卧铺车(因为回来的时候做了一次,发誓下辈子都不会坐卧铺了),15号早上到了柳州。回家过年好累了,天天象赶场,没有好好得休息过:亲戚家吃饭,同学聚会,相亲.....感觉自己好象蜗牛。回这躺家算算花掉了自己两个月的工资,光路费来回就1000了。现在回来想得最多是明年过年还回吗?呵呵
昨天是新年第一天工作,感觉没什么精神,希望自己在这新的一年里收获更多 100716.html

my 2007-02-26 12:08 发表评论
明白了!你是想**使用递归**来求解“猴子吃桃”问题,即: 从第1天开始,每天吃一半再多吃一个,到第10天剩1个,问第1天一共摘了多少桃子。 我们来**专门用递归的方法**详细实现并解释这个逻辑。 --- ### ✅ 正确的递归思路(逆推法) 我们要找的是 **第1天的桃子总数**,但直接正向递归很难,因为关系不明确。 所以采用**倒推 + 递归函数定义:`f(day)` 表示第 `day` 天开始时有的桃子数**。 已知: - 第10天开始时有 1 个桃子 - 第9天开始时的桃子数 = `(第10天桃子数 + 1) * 2` - 一般地:`f(day) = (f(day + 1) + 1) * 2` 因此我们可以写一个递归函数,从 `day=1` 开始调用,一直递归到 `day=10` 返回 1,再逐层返回计算。 --- ### ✅ 使用递归求解第一天桃子总数 ```c #include <stdio.h> // 递归函数:返回第 day 天早上拥有的桃子数量 int peach(int day) { // 终止条件:第10天早上只剩1个 if (day == 10) { return 1; } // 递归关系:今天桃子数 = (明天桃子数 + 1) * 2 return (peach(day + 1) + 1) * 2; } int main() { int total = peach(1); // 求第1天的桃子总数 printf("猴子第一天偷吃的桃总数为 %d\n", total); return 0; } ``` --- ### ✅ 输出结果: ``` 猴子第一天偷吃的桃总数为 1534 ``` --- ### 🔍 代码解释: | 代码 | 解释 | |------|------| | `int peach(int day)` | 定义一个函数,参数是当前是第几天 | | `if (day == 10)` | 如果是第10天,直接返回1(已知条件) | | `return (peach(day + 1) + 1) * 2;` | 否则:根据后一天的结果反推出今天的桃子数 | | `peach(1)` | 从第1天开始调用,触发整个递归过程 | --- ### 🔄 递归执行流程示意(简化): ``` peach(1) ├── (peach(2)+1)*2 ├── (peach(3)+1)*2 ├── ... ├── peach(10) → 1 ``` 最终层层返回: - peach(9) = (1 + 1) * 2 = 4 - peach(8) = (4 + 1) * 2 = 10 - ... - peach(1) = 1534 --- ### ⚠️ 注意事项: - 不要试图用 `n != 10` 来判断是否继续,因为你传入的是 `1`,永远不等于 `10`,会导致无限递归或错误。 - 不能在循环里做 `return` 就结束,那样只会执行一次。 - 参数命名不要冲突,比如你在 `for` 循环中又定义了 `n`。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值