帮忙看一下有点小复杂的递归程序
relia是递归的函数。红色标注是递归的地方
#include<cstdio>
#include <math.h>
#include <cstdlib>
#include <fstream>
#include <iostream>
#include<time.h>
#include<stdlib.h>
using namespace std;
#define M 5
#define N 12
#define NUM M*N
double *prob=new double[N];
int *change=new int[M];
int change1[NUM]={0};
int *change3=new int[M];
FILE *fp;
double data;
clock_t start,endp;
void frequence(int matrix[],int change[],int change1[]);
double relia(int matrix1[],int n);
int main()
{
int k=0;
int *matrix=new int[NUM];
for(int i=0;i<N;i++)
{
prob[i]=0.9;
}
if((fp=fopen("F:\\pathset1.txt","r"))==NULL)
cout<<"can not open the file"<<endl;
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
if(j<N-1)
fscanf(fp,"%d ",matrix+i*N+j);
else
fscanf(fp,"%d",(matrix+i*N+j));
}
fprintf(fp,"\n");
}//写入数组中的元素,元素只有0和1
fclose(fp);
start=clock();//计时开始
for(int i=0;i<M;i++)//change标志每一行中的元素数目
{
k=0;
for(int j=0;j<N;j++)
if(*(matrix+i*N+j)!=0)
k++;
*(change+i)=k;
}
for(int i=0;i<M;i++)
*(change3+i)=*(change+i);
frequence(matrix,change,change1);//将matrix进行阶梯形排列,结果正确
data=relia(change1,M);//调用relia函数,结果返回给data。
cout<<data<<endl;//输出结果。这里没有结果,所以relia函数存在问题
endp=clock();
cout<<start-endp<<endl;//程序运行时间
return 0;
}
void frequence(int matrix[],int change[],int change1[])//给matrix按照阶梯形排列
{
int k_min,i_min;
for(int i=0;i<M;i++)
{
k_min=N;
for(int j=0;j<M;j++)
if(*(change+j)!=0&&k_min>=*(change+j))
{
i_min=j;
k_min=*(change+j);
}
*(change+i_min)=0;
for(int k=0;k<N;k++)
*(change1+i*N+k)=*(matrix+i_min*N+k);
}
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
cout<<*(change1+i*N+j)<<" ";
cout<<endl;
}
delete matrix;
delete change;
}//排序后元素写入change1中
double relia(int matrix1[],int l)
{
double a1,a2;
int m=l;
int *change3=new int[l];
int *p1;
int k;
int k1=0;
double prob1=1.0;
if(l==1)
{
for(int k=0;k<N;k++)
if(*(matrix1+k)!=0)
prob1*=*(prob+k);
cout<<prob1<<endl;
return prob1;
}
for(int i=0;i<l;i++)
if(*(change3+i)==0)
return 1;
for(int i=0;i<N;i++)
if(*(matrix1+i)!=0)
{
k1=i;
break;
}
cout<<k1<<endl;
for(int i=0;i<l;i++)
if(*(matrix1+i*N+k1)==1)
m=m-1;
p1=new int[m*N];
for(int i=0;i<l;i++)
{
if(*(matrix1+i*N+k1)!=1)
for(int j=0;j<N;j++)
*(p1+i*N+j)=*(matrix1+i*N+j);
}
a1=relia(p1,m);
for(int i=0;i<l;i++)
*(matrix1+i*N+k1)=0;
for(int i=0;i<l;i++)
{
k=0;
for(int j=0;j<N;j++)
if(*(matrix1+i*N+j)!=0)
k++;
*(change3+i)=k;
// cout<<k;
}
a2=relia(matrix1,l);
return prob[k1]*a2+(1-prob[k1])*a1;
}
[ 本帖最后由 hdzhanjingyu 于 2011-3-31 12:27 编辑 ]