题目
输入
一个满足题目要求的输入范例。
输出
与样例输入对应的输出。
样例输入
3 10
样例输出
120
解题思路
需要递归的部分是:如果k=0或k=n时,值为1,即sum加上1;如果0<k<n时,对
C
n
k
C_n^k
Cnk进行分解。因此递归函数将实现上述功能,且递归函数停止运行的条件是k=0或k=n。
main函数部分只需调用递归函数,并输出sum的值即可。
难点
递归的实现:对于递归,首先需要确定的是什么事情被重复的在做,什么情况下可以停止递归。
对于此题,显然是题目给出的式子需要被重复执行,直到k=0或k=n得到值为1。因此,递归函数的功能便是遇到k=0或k=n值为1,遇到0<k<n则分解,分解后的两个组合项,将会继续调用C函数,直到分解后满足k=0或k=n。
代码
#include<stdio.h>
int sum = 0;
int C(int k, int n){
if (k==0 || k==n)
return 1;
else
{
sum+=C(k,n-1);
sum+=C(k-1,n-1);
return 0;
}
}
int main()
{
int k,n,temp;
scanf("%d %d",&k,&n);
if (k==n || k==0)
printf("1");
else
{
temp = C(k,n);
printf("%d",sum);
}
return 0;
}