n阶行列式求值&&全排列

行列式求值&&全排列

个人感觉自己写的行列式求值的程序与全排列的程序有几分神似,所以就把它们放到一起啦。

先来看求n阶行列式的程序

#include
#include 
//C语言初学者,欢迎大家指正
void show(int **p,int size)                //打印出数组中的元素
{
    int i,j;
    for (i=0;i

程序思路:将第m行展开

我觉得求n阶行列式这个问题和全排列这个问题,基本差不多,都是通过递归调用来实现的,下文附上全排列问题的代码。

#include 
void exchange(int *m,int *n)            //实现两个数字的交换
{
    int temp;
    temp=*m;
    *m=*n;
    *n=temp;
}

void quanpai(int n,int m,int *p)        //核心函数,n代表总的元素个数,m代表实现后m个元素的全排列
{
    int i;
    if (m==1){                          //递归的出口,将这个数列全部打印出来
        for(i=0;i

我还没学算法,所以,对于时间复杂度或者是空间复杂度的分析还不懂,不过都是递归算法,效率都会比较低。
对于上文所说的全排列的核心代码,我来解释一下。
首先,我觉得要实现递归,最先要解决问题就是寻找Question(n)与Question(n-1)之间的关系。对于实现后面m个元素全排列这个问题,我们需要先确定一个元素,定为p[n-m],然后实现后面m-1个元素的全排列,然后再将p[n-m]与后面的元素依次进行交换,每次交换后,都调用一下函数,实现后面m-1个元素的全排列,然后换回来,保证每次调用函数时数组不变。当m==n时,即为实现整个数组的全排列,这样就实现问题的求解。

能力有限,中间可能还有一些没有说明白的地方,希望大家可以理解。

附图:

你可能感兴趣的:(递归)