问题描述:

有五只猴子摘了一些桃子,打算隔天早上起来分了吃。 
晚上的时候,第一只猴子偷偷起来把桃子分成五堆,还多了一个,就把多了的那个吃掉,并拿走了一堆。
第二只猴子也偷偷起来将桃子分成了五堆,还是又多了一个,同样吃掉了这一颗桃子,并拿走了其中一堆。第三只、第四只、第五只猴子都做
了同样的事情。请问这堆桃子最少有多少个?
每只猴子每次的动作都一样,因此这个问题是一个典型的递归问题,C语言描述如下:
#include <stdio.h>

/*
 *功  能:根据初始桃子数计算能够完成分配任务的猴子数
 *参  数:num-初始桃子数 monkeyNum-能够完成分配任务的猴子数
 *返回值:能够完成分配任务的猴子数
 */
int Peach(int num, int monkeyNum)
{
     if((num-1)%5 != 0) 
          return monkeyNum;
     num = (num - 1) / 5 * 4;
     return Peach(num, monkeyNum+1);
}

int main()
{
     int peachNum = 1;
     /*如果有5个猴子能完成分配任务,则满足题目要求*/
     while(Peach(peachNum, 0) != 5)
          peachNum++;

     printf("Peach num = %d\n", peachNum);

     return 0;
}