
猴子吃桃
发布日期:2021-05-08 01:17:06
浏览次数:25
分类:精选文章
本文共 2093 字,大约阅读时间需要 6 分钟。
[程序代码]
#include/* 函数原型 */unsigned long f(unsigned int n);/* */int main(){ int n; printf("Input days n:"); scanf("%d", &n); if(n >= 1) { printf("x=%d\n", f(n)); } else { /* 数据非法 */ printf("data error!\n"); } /* */ return 0;}/* 猴子吃桃 */unsigned long f(unsigned int n){ if(n == 1) { /* 递归终止条件 */ return 1; } else { /* 递归一般条件 */ return 2 * f(n - 1) + 2; }}/* 分析 *//* 猴子在第n天吃桃时, 吃掉了当前的一半桃子, 还没吃够, 便又吃了一个桃子,方才罢休 *//* 由此关系可得第n天和第n-1天桃子数量的递推公式 *//* P(n-1)=P(n)-1/2*P(n)-1, p(n)为第n天的桃子数量, P(n-1)为第n-1天桃子的数量, 数量观测时间选在每天猴子即将吃桃子前 *//* P(n)=2*P(n-1)+2 */
[运行结果]
另外也可以用非递归的方式解决该问题.
[程序代码(迭代)]
#include/* 函数原型 */unsigned long f(unsigned int n);/* */int main(){ int n; printf("Input days n:"); scanf("%d", &n); if(n >= 1) { printf("x=%d\n", f(n)); } else { /* 数据非法 */ printf("data error!\n"); } /* */ return 0;}/* 猴子吃桃 */unsigned long f(unsigned int n){ unsigned long p = 1; /* 第一次迭代计算后的桃子数量对应第2天的桃子数量 */ unsigned int i = 2; while(i <= n) { /* p = 第i天吃桃子前的桃子数量 */ p = 2 * p + 2; i ++; } return p;}/* 分析 *//* 猴子在第n天吃桃时, 吃掉了当前的一半桃子, 还没吃够, 便又吃了一个桃子,方才罢休 *//* 由此关系可得第n天和第n-1天桃子数量的递推公式 *//* P(n-1)=P(n)-1/2*P(n)-1, p(n)为第n天的桃子数量, P(n-1)为第n-1天桃子的数量, 数量观测时间选在每天猴子即将吃桃子前 */
[运行结果]
最后我们再以尾递归思想实现该问题的求解.
[程序代码(尾递归)]
#include/* 函数原型 */unsigned long f(unsigned int n, unsigned long p);/* */int main(){ int n; printf("Input days n:"); scanf("%d", &n); if(n >= 1) { printf("x=%d\n", f(n, 1)); } else { /* 数据非法 */ printf("data error!\n"); } /* */ return 0;}/* 猴子吃桃 */unsigned long f(unsigned int n, unsigned long p){ if(n == 1) { /* 递归的终止条件 */ return p; } else { /* 递归的一般条件 */ p = 2 * p + 2; return f(n - 1, p); }}/* 分析 *//* 猴子在第n天吃桃时, 吃掉了当前的一半桃子, 还没吃够, 便又吃了一个桃子,方才罢休 *//* 由此关系可得第n天和第n-1天桃子数量的递推公式 *//* P(n-1)=P(n)-1/2*P(n)-1, p(n)为第n天的桃子数量, P(n-1)为第n-1天桃子的数量, 数量观测时间选在每天猴子即将吃桃子前 */
[运行结果]
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月11日 02时56分38秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【单片机开发】智能小车工程(经验总结)
2021-05-08
【单片机开发】基于stm32的掌上游戏机设计 (项目规划)
2021-05-08
C++&&STL
2021-05-08
子集(LeetCode 78)
2021-05-08
微信js-sdk使用简述(分享,扫码功能等)
2021-05-08
mxsrvs支持thinkphp3.2伪静态
2021-05-08
c++中ifstream及ofstream超详细说明
2021-05-08
vuex modules
2021-05-08
sleep、wait、yield、join——简介
2021-05-08
web项目配置
2021-05-08
基于单片机简易信号误差分析设计-全套资料
2021-05-08
基于单片机简易脉搏测量仪系统设计-毕设课设资料
2021-05-08
Javascript中String支持使用正则表达式的四种方法
2021-05-08
eclipse引用sun.misc开头的类
2021-05-08
Servlet2.5的增删改查功能分析与实现------删除功能(四)
2021-05-08
spring启动错误:Could not resolve placeholder
2021-05-08
查询某表格上次进行vacuum的时间
2021-05-08
invalid byte sequence for encoding
2021-05-08
redis向数组中添加值并查看数组长度
2021-05-08
JS编写一个函数,计算三个不同数字的大小,按从小到大顺序打印(穷举法)
2021-05-08