猴子分桃递归算法分析?/p>
/*
X
个桃?/p>
?/p>
5
只猴?/p>
第一只猴?/p>
?/p>
x
个桃子分?/p>
5
?/p>
还多出一?/p>
他把多了那个扔进大海
拿走了一
?/p>
第二只猴子也是如?/p>
等到第五只猴?/p>
海滩至少能分?/p>
1
个桃子。问海滩上原?/p>
x
是多少个桃子?/p>
非递归算法描述?/p>
数学抽象:假设海滩上现在?/p>
x
个桃子,那么
x
向下再分一次,也就?/p>
n-1
只猴子有桃可分的条件?/p>
须满?/p>
?/p>
x-1
)是
5
的倍数。下一只猴子再分桃,就?/p>
x
?/p>
5
分之
4. N-1
只猴子再分桃的条件就必须满足
?/p>
x-1
?/p>
*4/5
依次类推
算法设计:一个数
x
去判?/p>
x-1
是否能被
5
整除。如果可以,则把自己的五分之?/p>
拿出?/p>
作为下一
?/p>
分桃的基数,再进?/p>
下一轮判断。总共判断
5
轮,每一轮满足条件记为真,不满足记为假。只?/p>
5
轮都为真
则找?/p>
x
否则
x
继续
++
。实现下一?/p>
5
轮判断?/p>
*/
namespace
递归?/p>
_
猴子分桃?/p>
{
class
Program
{
static
int
fen()
//
返回海滩上原来最少多少桃?/p>
{
int
m;
bool
check
=
false
;
//
用于判断是否执行了五次,亦可?/p>
j==5
作为?/p>
//
断条?/p>
int
i
=
0
;
while
(
true
)
{
i
++
;
m
=
i;
for
(
int
j
=
0
; j
<
5
; j
++
)
{
if
((m
-
1
)
%
5
!=
0
)
//
判断
m-1
是否?/p>
//
整除,亦可用
(m-1)%5!=0
代替
{
check
=
false
;
break
;
}
else
{
m
=
(m
-
1
)
*
4
/
5
;
check
=
true
;
}
}
if
(check
==
true
)
{
return
i;
}
}
}
//
递归算法
/*
递归算法
数学抽象,与非递归刚好相反,递归是倒退,从最后一只猴子向上推理?/p>
假设当前猴子?/p>
x
个桃