二项式系数递归

这个算法的结果是:给出n的值和k的值,根据公式算出二项式系数值。

算法目的:练习使用递归算法

那么什么是递归呢?

在一个算法中,如果有直接调用自身或间接调用自身的过程,就是一个递归算法。

递归步骤:

1>对应于某些参数求值的一个或多个终止条件。

2>一个递归步骤。它根据先前某次值求当前值。递归步骤最终导致终止条件。

举个例子:

幂函数的递归有一个终止条件,就是n=0时。递归步骤描述了一般情况:

递归介绍完了,接下来介绍部分二项式的内容。

在初等数学中,我们学过关于二项式的一些性质,这里列出我们需要的两条:

好啦,准备工作都已经完成了,现在进行我们这个程序了!

主体程序思想:

终止条件:由二项式系数性质(1),当i=0或i=n时,返回1

递归步骤:由二项式系数性质(2),否则的话,令下标减1,上标不变=n1,下标减1,上标减1=n2,进行调用自己。

主体代码:(C语言)

int binom(int n,int i) {
	int n1;
	int n2;

	if((i == 0) || (i == n)) {
		return 1;
	}
	else {
		n1 = binom(n-1,i);
		n2 = binom(n-1,i-1);
		return n1+n2;
	}
}

最后再附上所有代码:

#include<stdio.h>

int binom(int n,int i);

int main() {
	int int1;
	int int2;

	printf("\nEnter an integer :\n");
	scanf ("%d",&int1);
	printf("\nEnter a second integer :\n");
	scanf ("%d",&int2);
	printf("\n");
	printf("Binomial Coefficiant : %d\n",binom(int1,int2));
	return 0;
} 

int binom(int n,int i) {
	int n1;
	int n2;

	if((i == 0) || (i == n)) {
		return 1;
	}
	else {
		n1 = binom(n-1,i);
		n2 = binom(n-1,i-1);
		return n1+n2;
	}
}

运行截图:

好啦,结束了,多多指教~~

时间: 2024-10-23 11:47:11

二项式系数递归的相关文章

蓝桥杯 算法训练 ALGO-150 6-1 递归求二项式系数值

算法训练 6-1 递归求二项式系数值 时间限制:10.0s   内存限制:256.0MB 问题描述 样例输入 一个满足题目要求的输入范例.3 10 样例输出 与上面的样例输入对应的输出. 数据规模和约定 输入数据中每一个数的范围. 例:结果在int表示时不会溢出. 题目解析: 对于递归问题,我们注意两点:(1)找出口:(2)找相似性. 有题目中我们得知: (1)出口已经找到: 当 k = 0 或 k = n 时,结果为 1. (2)相似性也找到了:当 0 < k < n 时,递归调用  示例代

每日一小练——二项式系数加法解

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:二项式系数加法解 内容:请编写一个程序,仅仅用加法,求出n中取r个组合系数C(n,r),而且尽可能地使加法数目减少. 关于二项式:在数学里,二项式系数,或组合数,是定义为形如(1 + x)的二项式n次幂展开后x的系数(当中n为自然数,k为整数),通常记为.从定义可看出二项式系数的值为整数.这是来自百度的定义.我就不再赘余了. 关于二项式系数我们有一条性质使我们能够使用递归形式: C(n,r)=C(n,r-1)+C(n-

动态规划 — 计算二项式系数

如果问题是由交叠的子问题所构成的,那么我们就可以用动态规划技术来解决它.也就是说,一个问题的解可由它的规模更小的子问题的解递推得出.由于子问题的交叠性质,所以采用递归地方法一次又一次地求解子问题时,进行了很多重复的工作.所以动态规划法建议:把子问题的解存入某个表中,通过表一步步反解出原始问题.斐波那契数列就是一个很好的例子: F(n) = F(n-1) + F(n-2)     当n≥2 F(0) = 0 F(1) = 1 如果直接采用递推公式求解第n个斐波那契数,那么会重复大量的无用工作,效率

PHP_递归实现无限级分类

<?php /** * 递归方法实现无限级别分类 * @param array $list 要生成树形列表的数组[该数组中必须要有主键id 和 父级pid] * @param int $pid=0 父级id * @param int $level=0 缩进次数[用于指定分类名称要缩进的数量] */ function getTree($list,$pid=0,$level=0 ) { // static 表示声明一个静态变量, 静态变量在函数中会一直保存它的值 static $tree = arr

3.sql中的向上递归和向下递归

1.向下递归 select * from table_name where 条件 connect by prior bmbm(本级关联条件)=sjbmbm(上级关联条件) start with bmbm(本级关联条件)='610000000000'(本级编码)--包含本级 select * from table_name where 条件 connect by prior bmbm(本级关联条件)=sjbmbm(上级关联条件) start with sjbmbm(本级关联条件)='6100000

斐波那契数列的递归和非递归解法

//递归解法 function fib(n){ if(n < 1){ throw new Error('invalid arguments'); } if(n == 1 || n == 2){ return 1; } return fib(n - 1) + fib(n - 2); } //非递归解法 function fib(n){ if(n < 1){ throw new Error('invalid arguments'); } if(n == 1 || n == 2){ return 1

python3 递归

递归调用: 在调用一个函数的过程中,直接或者简介调用了该函数本身 必须有一个明确的结束条件 l = [1,[2,3,[4,5,[6,7,[8,9,[10,11,[12,13]]]]]]] def func(l): for i in l: if isinstance(i,list): func(i) else: print(i) func(l) 应用场景:不知道应该循环多少次,只知道什么时候应该结束

day05匿名函数,内置函数,二分法,递归,模块

yield作为表达式来使用的方式 #grep -rl 'python /root """ 查找root下文件中含有python的文件 """ import os def init(func): def wrapper(*args,**kwargs): g=func(*args,**kwargs) next(g) return g return wrapper @init def search(target): while True: search

浅谈递归调用的个人领悟

从大一开始学c,就不是挺理解递归的,最近突然有所体会: 递归调用中递归调用的函数可以把它想象成为一个树的结点,在函数中调用自身就是一个分支,直到出口条件时就是这棵树的叶子结点.叶子的值便是出口返回的值.最后从叶子结点按照你所调用的方法向上返回值,最终结束递归调用.