2016-01-12 65 views
0

美好的一天!我在计算递归时遇到了一个问题,这段代码已经在网络中,但我做了一些额外的代码,我的问题是如何计算程序的IF部分? ,这是代码:c递归计数

#include <stdio.h> 
#include <math.h> 

int combinationUtil(int arr[], int data[], int start, int end, int index, int r,float MEAN); 

int printCombination(int arr[], int n, int r,float MEAN) 
{ 

int data[r]; 

combinationUtil(arr, data, 0, n-1, 0, r,MEAN); 
} 


int combinationUtil(int arr[], int data[], int start, int end, int index, int r,float MEAN) 
{ 
int j,i,a=1,b=0,f=0,ch,total=0; 
float sum=0,mean,deviation=0,standard_deviation; 



if (index == r){ 
     int count=0; 

    for (j=0; j<r; j++) 
    { 

     sum=sum+data[j]; 
     deviation=deviation+pow((MEAN-data[j]),2); 
    } 

    mean=sum/r; 
    standard_deviation=sqrt(deviation/(r-1)); 

    if(MEAN<=(mean+(2.776*standard_deviation))&& MEAN>=(mean-(2.776*standard_deviation))){ 
    printf("%d",a); 
    count++;} 
    else printf("%15d",b); 
    count=count; 

    return ;} 



for (i=start; i<=end && end-i+1 >= r-index; i++) 
    { 

    data[index] = arr[i]; 
    combinationUtil(arr, data, i+1, end, index+1, r,MEAN); 

    } 

    } 




int main() 
{ 
int arr[] = {2,4,6,8,10,7,8}; 
int r = 3,i,count=1,total=0; 
int n = sizeof(arr)/sizeof(arr[0]); 
float sum=0,MEAN; 
for(i=0; i<n; i++) 
{ 
    sum=sum+arr[i]; 
} 
MEAN=sum/n; 
printf("MEAN=%f\n\n\n",MEAN); 


printCombination(arr,n,r,MEAN)); 


return 0; 
} 

这是输出:

enter image description here

+0

”代码已经在网络中“。咦? – Drop

+0

“来计算程序的IF部分”你如何计算程序的一部分? – Drop

+0

@Drop我猜OP意味着他从互联网上获得了代码。 – user3437460

回答

1

我想以计数的IF段,你应该添加计数变量作为引用参数的combinationUtil函数,所以你可以从函数中获得计数的结果。

#include <stdio.h> 
#include <math.h> 

int combinationUtil(int arr[], int data[], int start, int end, int index, int r, float MEAN, int *count); 

int printCombination(int arr[], int n, int r,float MEAN, int *count) 
{ 
    int *data = malloc(sizeof(int) * r); 

    combinationUtil(arr, data, 0, n-1, 0, r,MEAN, count); 

    free(data); 
    return 0; 
} 


int combinationUtil(int arr[], int data[], int start, int end, int index, int r, float MEAN, int *count) 
{ 
    int j, i, a=1, b=0, f=0, ch, total=0; 
    float sum=0, mean, deviation=0, standard_deviation; 

    if (index == r) { 

     for (j=0; j<r; j++) 
     { 
      sum=sum+data[j]; 
       deviation=deviation+pow((MEAN-data[j]),2); 
     } 

     mean=sum/r; 
     standard_deviation=sqrt(deviation/(r-1)); 

     if(MEAN<=(mean+(2.776*standard_deviation)) 
      && MEAN>=(mean-(2.776*standard_deviation))){ 

      printf("%d",a); 
      (*count)++; 
     } 
     else 
      printf("%15d",b); 

     return 1; // different return value 
    } 

    for (i=start; i<=end && end-i+1 >= r-index; i++) 
    { 
     data[index] = arr[i]; 
     combinationUtil(arr, data, i+1, end, index+1, r,MEAN, count); 
    } 
    return 0; 
} 


int main() 
{ 
    int arr[] = {2,4,6,8,10,7,8}; 
    int r = 3, i, count=0, total=0; 
    int n = sizeof(arr)/sizeof(arr[0]); 
    float sum = 0, MEAN; 
    for(i=0; i<n; i++) 
    { 
     sum = sum + arr[i]; 
    } 
    MEAN = sum/n; 
    printf("MEAN=%f\n\n\n",MEAN); 

    printCombination(arr, n, r, MEAN, &count); 

    printf("\ncount = %d", count); 

    return 0; 
} 

编辑:代码完成并只在C不是在C++。 “

+0

这就是说,如果你想获得主要功能的计数,否则你应该更具体。 – Artwo

+0

谢谢artwo,我会尝试这个代码 – chanboi

+0

抱歉标记C++,我认为c和C++有点相同,所以我也标记C++ – chanboi