有一-只猴子第-一天摘下了若干个桃子,当即吃掉了一半,觉得不过瘾又多吃了一个;第二天又将剩下的桃子吃掉一半, 还不过瘾又多吃了一个:按照这个吃法,每天都吃掉前天剩下的一半又多一个。到了第10天,就剩下一一个桃子。问:这只猴子第一天摘下了多少个桃子? 使用递归和递推两种方法编程实现。 递归思路:假设第-天摘下了f(1)个桃子,当即吃掉了一半, 觉得不过瘾又多吃了一个,即,吃掉Jf(1)/2+1 个桃子,剩下: f()=(1)-(1)/2+1)= f()/2-1 第二天又将剩下的桃子吃掉一半,还不过瘾又多吃了一个,剩下 f(3)= f(2)/2-1 按照这个吃法,每天都吃掉前天剩下的一半又多一个,剩下 f(n)-f(n-1)/2-1 到了第10天,就剩下一个桃子,即 f(10)=1 间:“这只猴子第一天摘下了多少个桃子?” 即, 求f(I)。 将公式f(n)=f(n-1)/2-1变形为 (0)-1)-0()+1)*2 显然,上式是一 一个递归函数,可通过它计算出f(),即猴子第一-天摘下的桃子数。并用函数调用图描述递归函数的调用关系,使用流程图描述循环的过程
时间: 2023-04-05 17:01:57 浏览: 113
java代码-编程实现,一个只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,有多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃了一个,以后每天早上都吃掉前一天剩下的一半零一个,第十天早上,发现只剩下一个桃子,请问猴子第一天一共摘了多少个桃子?
这只猴子第一天摘下了1534个桃子。
递推思路:从第10天开始往前推,每天剩下的桃子数量可以表示为f(n) = 2 * (f(n+1) + 1),其中f(10) = 1。依次往前推算,即可得到第一天摘下的桃子数量。
函数调用图描述递归函数的调用关系如下:
f(10)
|
f(9)
|
f(8)
|
...
|
f(1)
流程图描述循环的过程如下:
开始 -> 第10天剩下1个桃子 -> 第9天剩下3个桃子 -> 第8天剩下7个桃子 -> ... -> 第1天摘下的桃子数量为1534 -> 结束
阅读全文