问题简述:
青蛙过河
一群青蛙按编号从小到大排列在左岸L,大青蛙身上堆叠着小青蛙,不允许小青蛙身上堆叠着大青蛙,溪中有S根石柱,Y片荷叶,石柱上可以顺序排列青蛙,但是荷叶上只允许一只青蛙呆在上面,问能有多少只青蛙到达右岸R并且按编号顺序堆叠?
**分析题目,可得:
int Jump(int s, int y)
输入:荷叶y,石柱s
输出:右岸青蛙数目**step 1:假设无石柱,荷叶只有1片,即Jump(0,1) 可得最多有2只青蛙跳到对岸,Jump(0,1)=2. 1.#1跳到y 2.#2跳到R 3.#1跳到R step 2: 假设无石柱,荷叶有n片,即Jump(0,n-1) 1.#1跳到y1 2.#2跳到y2 ... n-1.#n-1跳到n-1 n.#n跳到R ... 分析得,在无石柱的情况下,Jump(0,y)=y+1 step 3: 假设有1根石柱,1片荷叶,即Jump(1,1) 1.#1跳到y 2.#2跳到s 3.#1跳到s 4.#3跳到y 5.#4跳到R 6.#3跳到R 7.#1跳到y 8.#2跳到R 9.#1跳到R Jump(1,1)=4 经过分析,可将过程分为两部分: 1.上半部分青蛙:L→y→S 2.下半部分青蛙:L→y→R 然后,上半部分青蛙再由S→y→R 这样整个过程可以看作2个L→y→R过程 Jump(1,1)=2 * Jump(0,1) step 4: 假设有s根石柱,y片荷叶 Jump(s,y)=2 *Jump(s-1,y)
int Jump(int s,int y){
int sum=0;
if(s==0)
sum=y+1;
else
sum=2*Jump(s-1,y);
return sum;
}