组合数的递归函数
关于一道组合数的依次计算,但是需要利用递归函数去调用,题目如下:

看到这道题,最开始的思路是利用基本的计算方法,分子依次相乘,除以分母依次相乘
下面展示一些 内联代码片。
//
#include<stdio.h>
int fun(int n, int i);
int main(){
int n;
scanf("%d",&n);
for(int i = 0;i <= n;i++){
if(i != n)
printf("%d,",fun(n,i));
else
printf("%d",fun(n,i));
}
return 0;
}
int fun(int n, int i){
int zi = 1,mu = 1;
int m = 1;
if(i == 0 || i==n)
return 1;
else{
for(int op = 0;op < i;op++){
zi = zi * n;
n--;
}
for(int op2 = 0;op2 < i;op2++){
mu = mu * m;
m++;
}
return zi/mu;
}
}
发现并无法利用函数递归,于是反思计算过程,最后回想起高中的数学公式:
C(n , k) = C (n - 1, k) + C ( n - 1 , k - 1) //注意n是下方数字
实现代码如下:
#include<stdio.h>
int fun(int n, int i);
int main(){
int n;
scanf("%d",&n);
for(int i = 0;i <= n;i++){
if(i != n)
printf("%d,",fun(n,i));
else
printf("%d",fun(n,i));
}
return 0;
}
int fun(int n, int i){
if(i == 0 || i==n)
return 1;
else return fun( n-1 , i)+ fun(n-1 , i-1); //直接套入公式即可
}
由此可见,在这种情况下,函数体的递归调用大大减轻编程难度。
本文探讨了如何使用递归函数来计算组合数,通过将C(n,k)的递推关系C(n,k) = C(n-1,k) + C(n-1,k-1)应用到函数设计中,简化编程过程。通过实例展示了如何利用递归降低编程复杂性,并介绍了从基本计算到公式运用的转变过程。
1180

被折叠的 条评论
为什么被折叠?



