C语言递归求排列的结果

C语言递归求排列的结果

排列:一般地,从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元素的一个排列(permutation)。
排列的计算公式如下:
在这里插入图片描述

  1. 算法分析:

我们很容易想到用递归写n的阶乘,n!=n*(n-1)(n-2)…2*1
特别的,当n=0时,n!=1

  1. 解题过程:

(1)、定义求n的阶乘的函数fact。
(2)、定义permutation函数,调用fact函数,分别传参数为n 和(n-m)。

  1. 注意:
    需要注意的就是递归过程中的递归出口条件,本题中当n=1或者当n=0时到达程序出口,返回1。

代码块:

#include

int fact(int n);
int permutation(int n,int m);

int main()
{
	int n,m;
	printf("输入总数n=");
	scanf("%d",&n);
	printf("输入需要排列的数m=");
	scanf("%d",&m);
	printf("%d\n",permutation(n,m));
}

int fact(int n)                               //自定义fact函数,用来求n的阶乘
{
	if(n<0)
		return 0;
	else if(n==0 || n==1)
		return 1;
	else
		return n*fact(n-1);
}

int permutation(int n,int m)
{
	int A;
	A=fact(n)/fact(n-m);
	return A;
}

你可能感兴趣的:(C语言递归求排列的结果)