关于瓶子问题的递归算法。

呵呵,看到这位帅哥(http://blog.csdn.net/lihan6415151528/archive/2008/12/16/3530016.aspx)

写的算法,顺便锻炼一下自己写一个:

情景是:一元一瓶的汽水,2个空瓶能换一瓶汽水。
问假如你有X元钱,能喝Y瓶汽水. 用y=f(x)表示

如果是N空瓶换一个空瓶呢,用y=f(x,n)表示

 

我的代码,如果是2换1:


public int f(int x) {
if(x/2  == 0) return x;
int p = x%2;
if(p == 0)
return x + f(x/2);
else return x + f(x/2) + 1;
}



如果是N换1的话,那么


int getY(int x) {
int j = x%t;
int g = last(x, t);
int u = x - j;
int y = f(u, t) + j;
if(j + g >= t) y = y + 1;
return y;
}
last(int x, int t) {
if(x < t) return x;
else return last(x/t);
}
public int f(int x, int t) {
if(x < t) return x;
return x + f(x/t, t);
}


第二种方法比较笨,但我只能想到这种了。

你可能感兴趣的:(关于瓶子问题的递归算法。)