20
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
实例
#include<stdio.h>
int main()
{
float h,s;
h=s=100;
h=h/2; //第一次反弹高度
for(int i=2;i<=10;i++)
{
s=s+2*h;
h=h/2;
}
printf("第10次落地时,共经过%f米,第10次反弹高%f米\n",s,h);
return 0;
}
以上实例输出结果为:
第10次落地时,共经过299.609375米,第10次反弹高0.097656米
21
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
也是经典的题,很锻炼思维。
程序分析:采取逆向思维的方法,从后往前推断。
- 设x1为前一天桃子数,设x2为第二天桃子数, 则:
x2=x1/2-1, x1=(x2+1)*2
x3=x2/2-1, x2=(x3+1)*2
以此类推: x前=(x后+1)*2
- 从第10天可以类推到第1天,是一个循环过程。
实例
#include <stdio.h>
#include <stdlib.h>
int main(){
int day, x1 = 0, x2;
day=9;
x2=1;
while(day>0) {
x1=(x2+1)*2; // 第一天的桃子数是第2天桃子数加1后的2倍
x2=x1;
day--;
}
printf("总数为 %d\n",x1);
return 0;
}
以上实例输出结果为:
总数为 1534
这篇博客通过两个经典数学问题展示了递归在解决实际问题中的应用。第一个问题是关于一个球从100米落下并反复反弹的问题,通过计算得出第10次落地时球经过的总距离和反弹高度。第二个问题是猴子吃桃问题,通过逆向思维求解第1天猴子摘下的桃子总数。这两个问题都涉及到迭代和递归的编程实现,有助于提升逻辑思维能力。
1456

被折叠的 条评论
为什么被折叠?



