经典递归(排队买票)

一场球赛开始前,售票工作正在紧张的进行中.每张球票为50元,现有m+n个人排队等待购票,其中有m个人手持50元的钞票,另外n个人手持100元的钞票.假设开始售票时售票处没有零钱,求出m+n排队购票,
使售票处不至出现找不开钱的局面的不同排队种数.(约定:拿同样面值钞票的人对换位置后为同一种排队)

思路:f(m,n)表示m个人手持50元的钞票,n个人手持100元钞票时的排队总数。

(1)

n=0的时候情况是什么样子的?

(2)

m时情况是什么样子的?

(3):其他情况

当第m+n个人手持100元的纸币,则他前面有n-1个人手持100元的纸币,此时的情况我们可以缩小为f(m,n-1);

当第m+n个人手持50元纸币的时候,则在他前面有m-1个人手持50元的纸币,有n人手持100元的纸币,此时我们所有的情况我们可以表示为f(m-1,n);

由此我们可以得到f(m,n)的递推关系:

f(m,n)=f(m-1,n)+f(m,n-1)

初试条件:

m时,f(m,n)=0;

n=0时,f(m,n)=1;

代码:

#include

int fun(int m,int n)

{

long sum;

if(m

sum =0;

else if(n==0)

sum=1;

else

sum=fun(m,n-1)+fun(m-1,n);

return  sum;

}

int main(){

int a,b;

    scanf("%d %d",&a,&b);

long t=fun(a,b);

printf("%d",t);

你可能感兴趣的:(经典递归(排队买票))