利用递归与行列式展开定理求行列式的值(数组指针版)

今天用数组指针改写了一下行列式求值程序,代码:

 1 #include <iostream>
 2 #include <cmath>
 3 using namespace std;
 4 int main()
 5 {
 6     int rank;
 7     void setDet(double*,int);
 8     double valDet(double*,int);
 9     cout<<"输入行列式的阶数:";
10     cin>>rank;
11     double *DetPtr=new double[rank*rank];
12     setDet(DetPtr,rank);
13     cout<<"行列式的值为:"<<valDet(DetPtr,rank)<<endl;
14     return 0;
15 }
16 void setDet(double *detPtr,int rank)
17 {
18     cout<<"输入行列式:"<<endl;
19     int m=rank*rank;
20     for(int i=0;i<m;i++)
21         cin>>detPtr[i];
22 }
23 double valDet( double* detPtr, int rank)
24 {
25     double val=0;
26     if(rank==1) return detPtr[0];
27     for(int i=0;i<rank;i++)                 //计算余子式保存在nextDetPtr[]中
28     {
29         double *nextDetPtr=new double[(rank-1)*(rank-1)];
30         for(int j=0;j<rank-1;j++)
31             for(int k=0;k<i;k++)
32                 nextDetPtr[j*(rank-1)+k]=detPtr[(j+1)*rank+k];
33         for(int j=0;j<rank-1;j++)
34             for(int k=i;k<rank-1;k++)
35                 nextDetPtr[j*(rank-1)+k]=detPtr[(j+1)*rank+k+1];
36         val+=detPtr[i]*valDet(nextDetPtr,rank-1)*pow(-1.0,i);
37     }
38     return val;
39 }
时间: 2025-01-09 17:42:10

利用递归与行列式展开定理求行列式的值(数组指针版)的相关文章

用递归下降分析求表达式的值

<数据结构>中表达式求值的经典算法是用两个栈,一个存数字,一个存运算符.依次读入表达式中的每个字符,若是数字则进数字栈,若是运算符则和运算符栈的栈顶运算符比较优先权作相应操作,直至整个表达式求值完毕.运算符的优先级表如下   + - * / ( ) # + > > < < < > > - > > < < < > > * > > > > < > > / > >

求行列式的值(递归)

/* #include <math.h> #include <stdio.h> #define N 100 #define LIM -100000000 float det(float a[N][N],int n){ if(n==1) return a[0][0]; if(n==2) return a[0][0]*a[1][1]-a[0][1]*a[1][0];// the base situation else{ int j,i,flag=1; float ret=0; for(

老笔记整理五:C实现10阶内通过展开代数余子式求行列式的值

这个分为两部分,先是写出了C实现计算三阶行列式,然后过了一段时间突然有了思路才写下了10阶内这段代码.真怀念那段写代码的日子. 一:C实现计算三阶行列式 最近高数课在上线性代数,二阶的还能口算,三阶的有点麻烦,想陆陆续续地把公式都用C来实现.因为二阶的行列式如果用C来写就是一句话:val=det[0][0]*det[1][1]-det[0][1]*det[1][0];太简单了这里就不写了,主要写关于三阶的.只要把这个三阶行列式里每一个元素打进去就能算出值来了.过两天再写余子式的展开. 1 #in

利用递归求两个数字的最大公约数。

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> //利用递归求两个数字的最大公约数. //公因数,如果一个整数同时是几个整数的约数,则这个整数为它们的"公约数" function getNum(a, b) { va

249 递归:概念,利用递归求1~n的阶乘,利用递归求斐波那契数列,利用递归遍历数据

6.1什么是递归 递归:如果一个函数在内部可以调用其本身,那么这个函数就是递归函数. 简单理解: 函数内部自己调用自己, 这个函数就是递归函数 注意:递归函数的作用和循环效果一样,由于递归很容易发生"栈溢出"错误(stack overflow),所以必须要加退出条件return. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"&g

第一章 基本概念_利用霍纳规则求多项式的值(递归)

#include <stdio.h>  #include <stdlib.h>  #define LEN 3  int hornor(int [],int,int);  int main()  {     int a[3]={1,2,3};//数组表示多项式的系数     int x=2;//多项式的自变量值     int result=0;//存放结果     result = hornor(a,0,2);  //3*2^2+2*2^2+1*2^0              

利用递归和动态规划来求解组合数

组合数定义:从m个不同元素中,任取n(n≤m)个元素并成一组,叫做从m个不同元素中取出n个元素的一个组合:从m个不同元素中取出n(n≤m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数. 下面是一种比较通俗的计算公式: 其递归公式为: c(n,m)=c(n-1,m-1)+c(n-1,m) 下面是c++实现该递归算法: #include <iostream> #include <stdlib.h> #define EXIT -1 using namespace st

利用递归 实现UIScrollView无限滚动的效果

项目需求 利用递归 实现UIScrollView无限滚动的效果. 上机试题, #import "ViewController.h" @interface ViewController (){ UIScrollView *mainScroll; BOOL isFinish; int x; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; x=0; isFinish = YES;

编程题:用递归调用实现,求N!(!阶乘)。

#include<stdio.h> long fac(int n) { if(n==1) return 1L;             /*"1L"为长整型常量*/ else return n*fac(n-1); } void main() {int m; scanf("%d",&m); printf("%2d!=%d\n",m,fac(m)); } 算法解析: 运行结果: 编程题:用递归调用实现,求N!(!阶乘).,布布扣,