龙空技术网

C语言编程之递归法解决5猴子分桃问题

嵌入式编程爱好者 208

前言:

今天看官们对“编程利用递归方法求5”可能比较注重,兄弟们都想要剖析一些“编程利用递归方法求5”的相关文章。那么小编同时在网络上汇集了一些关于“编程利用递归方法求5””的相关资讯,希望姐妹们能喜欢,大家一起来学习一下吧!

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

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

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

第二个猴子拿走的是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/5*4);

}

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~~~

标签: #编程利用递归方法求5 #递归法求5