标题:帮忙看一下有点小复杂的递归程序
取消只看楼主
hdzhanjingyu
Rank: 2
等 级:论坛游民
帖 子:26
专家分:29
注 册:2010-12-3
结帖率:60%
已结贴  问题点数:20 回复次数:1 
帮忙看一下有点小复杂的递归程序
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 编辑 ]
搜索更多相关主题的帖子: change 
2011-03-31 11:05
hdzhanjingyu
Rank: 2
等 级:论坛游民
帖 子:26
专家分:29
注 册:2010-12-3
得分:0 
回复 2楼 laoyang103
红色标注是递归的地方。
2011-03-31 12:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-335273-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.248954 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved