问题描述:
样例输入:
一个满足题目要求的输入范例。
3 10
样例输出:
与上面的样例输入对应的输出。(输出120)
数据规模和约定
输入数据中每一个数的范围。
例:结果在int表示时不会溢出。
思路:题目规定相当明确,要用递归。那就主要思考一下递归体和递归出口(其实这也在问题描述中给出来了)。我是先在纸上画一下样例情况下是怎么个流程,发现只需要将不断减小到k=0或k=n的C的个数加起来就行。如果还有些不理解的话请看如下代码。
代码:
#include<stdio.h>
int count;//数一下k=0或k=1个数
int c(int a,int b);//定义递归函数
int main()
{
int n,k;
scanf("%d%d",&k,&n);
count=0;//个数初始化为0
c(k,n);//进行递归运算
printf("%d",count);
return 0;
}
int c(int a,int b)
{
if(a==0||a==b)//递归出口,k=0或k=n
{
count++;//每出去一个,个数加一
//这行加个return也是可以的,看着也许会更舒服些~
}
else
{
return c(a,b-1)+c(a-1,b-1);//根据题意,返回k~n-1和k-1~n-1
}
}
测试:(我用的是DEV C++)
总结:这一题考的是一个递归算法,根据题目指示一步一步往下想就okk啦。