2019-12-22
/****************************************************************************************
* 程序名: 青蛙过河问题(递归)
* 编制时间 2017/11/28
* 编制人 小小书童
problem描述:
一条小溪尺寸不大,青蛙可以从左岸跳到右岸,在左岸有一石柱L,面积只容得下一只青蛙落脚,同样右岸也有一石柱R,面积也只容得下一只青蛙落脚。
有一队青蛙从尺寸上一个比一个小。我们将青蛙从小到大,用1,2,…,n编号。规定初始时这队青蛙只能趴在左岸的石头L上,当然是一个落一个,
小的落在大的上面。不允许大的在小的上面。在小溪中有S个石柱,有y片荷叶,规定溪中的柱子上允许一只青蛙落脚,如有多只同样要求一个落一个,
大的在下,小的在上。对于荷叶只允许一只青蛙落脚,不允许多只在其上。对于右岸的石柱R,与左岸的石柱L一样允许多个青蛙落脚,但须一个落一个,
小的在上,大的在下。当青蛙从左岸的L上跳走后就不允许再跳回来;同样,从左岸L上跳至右岸R,或从溪中荷叶或溪中石柱跳至右岸R 上的青蛙也不允许再离开。
问在已知溪中有S根石柱和y片荷叶的情况下,最多能跳过多少只青蛙?
*****************************************************************************************
*/
#include <iostream>
using namespace std;
int Jump(int ,int) ;
int main()
{
int s = 0 ,y =0 , sum= 0 ; //s 为河中石柱数 ,y 为荷叶数
cout<<"请输入石柱数S=";
cin>>s ;
cout<<"请输入石柱数y=";
cin>> y ;
sum =Jump(s,y) ;
cout<<"Jump("<<s<<","<<y<<")="<<sum <<endl ;
return 0;
}
int Jump(int r ,int z)
{
int k =0 ;
if(r==0){
k=z+1 ;
}
else{
k=2*Jump(r-1,z) ;
}
return k ;
}