算法训练 递归求二项式系数值

问题描述:

在这里插入图片描述样例输入:
       一个满足题目要求的输入范例。
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啦。

发布了7 篇原创文章 · 获赞 3 · 访问量 1042

猜你喜欢

转载自blog.csdn.net/qq_45556278/article/details/105034567