问题:海滩上有一堆桃子,五只猴子来分。
第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。
第二只猴子把剩下的桃子又均匀 分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

剖析:采取递归算法。
设桃子总数为N,则

第一个猴子拿走的是M1=(N-1)/5;

猴子找php递归C说话编程之递归法解决5山公分桃问题 Vue.js

第二个猴子拿走的是M2= (M1-1)/ 5 ;

第三个猴子拿走的是M3= (M2-1)/ 5 ;

依此类推,第n个猴子拿走的桃子是

M(n) = (M(n-1)-1)/5;

软件实现:

#include <stdio.h>

int nCounter = 0;

int f(int nNum)

{

int nTmp = nNum - 1;

if((0 == (nTmp%5)) && (nCounter < 5 ))

{

nCounter ++ ;

return f(nTmp/54);

}

else

return nNum;

}

int main(int argc,char argv[])

{

for(int i=1;;i++)

{

if((i-1)%5==0) //代码优化

{

nCounter = 0;

if( f(i)!=-1 && nCounter==5)

{

printf(\"大众统共有 %d 个桃子\n\"大众,i);

break;

}

}

}

return 0;

}

VC6.0下编译输出:

~~~end~~~