Skip to content

Commit ecde633

Browse files
author
Wang Shurong
committed
猴子吃桃问题
猴子摘了若干个桃子: 第一天吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半又多吃了一个。 以后每天早上都吃了前一天剩下的一半零一个。 到第十天早上再想吃时,就剩下1个桃子了。 试编程解决:第一天共摘了多少个桃子?
1 parent 30b1d4f commit ecde633

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

eatPeach.php

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<?php
2+
header("Content-Type:text/html;charset=utf-8");
3+
//--猴子吃桃
4+
// 猴子摘了若干个桃子
5+
// 第一天吃了一半,还不过瘾,又多吃了一个。
6+
// 第二天早上又将剩下的桃子吃掉一半又多吃了一个。
7+
// 以后每天早上都吃了前一天剩下的一半零一个。
8+
// 到第十天早上再想吃时,就剩下1个桃子了。
9+
// 试编程解决:第一天共摘了多少个桃子?
10+
11+
//思路:通过第二天的桃子数逆推出第一天的桃子数
12+
// P2 = P1/2 - 1;
13+
// --> P2 + 1 = P1/2
14+
// --> (P2 + 1) * 2 = P1;
15+
// --> P1 = (P2 + 1) * 2;
16+
17+
18+
//递归算法
19+
// 递归的本质就是要找到相邻两个数据之间的关系代数式
20+
function peaches($day,$peach){
21+
if($day==1){
22+
return $peach;
23+
}else{
24+
return peaches($day-1,($peach+1)*2);
25+
}
26+
}
27+
echo '递归--第一天摘了',peaches(10,1),'颗桃子<br/>';
28+
echo '<hr/>';
29+
30+
31+
//递归解法二:
32+
// 递推公式:f(n-1) = (f(n)+1)*2
33+
function peaches2($n){
34+
if( $n == 10 ){
35+
return 1;
36+
}else{
37+
return ( peaches2($n+1) + 1 ) * 2 ;
38+
}
39+
}
40+
41+
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
42+
43+
//递推算法
44+
function eatPeach(){
45+
for( $day = 10; $day > 0; $day-- ){
46+
$peach = ($day==10) ? 1 : ($peach+1)*2;
47+
}
48+
return $peach;
49+
}
50+
echo '递推--第一天摘了',eatPeach(),'颗桃子<br/>';
51+
echo '<hr/>';
52+
53+
//流程演示
54+
function showPeach(){
55+
for( $day = 10; $day > 0; $day-- ){
56+
if( $day == 10 ){
57+
$peach = 1;
58+
echo '',$day,'天剩',$peach,'颗桃子<br/>';
59+
continue;
60+
}
61+
$peach = ($peach + 1) * 2;
62+
echo '',$day,'天剩',$peach,'颗桃子<br/>';
63+
}
64+
return $peach;
65+
}
66+
echo '<p>流程演示:</p>';
67+
$p = showPeach();
68+
?>

0 commit comments

Comments
 (0)