使用递归查找数组中数字的频率

时间:2016-01-21 12:27:12

标签: c function parameter-passing

我的代码块出错。但是我无法在

中的任何地方找到它

程序。它的意思

  第3行中的

:预期';',','或者')'之前' ='令牌

 #include<stdio.h>

 int count_key1(int a[],int size,int key,int flag=0)
 {

     if(size!=0)
         {
             if(a[size-1]==key)
                 count_key1(a,size--,key,flag++);
         }
     else
        return flag;
 }
 int main()
 {
     int b[30]={1,4,2,3,2,6,6,9},key1=9,result;
     result=count_key1(b,8,key1,0);
     printf("%d is %d times present",key1,result);
     return 0;
 }

3 个答案:

答案 0 :(得分:9)

在C中,您无法在函数参数中分配默认值

删除

中的 int count_key1(int a[],int size,int key,int flag=0)
C++
IIRC,你对str函数重载感到困惑,如果在调用函数时没有传递参数,我们可以为参数设置一些默认值。

但是,在C中,函数调用必须完全匹配定义中存在的签名。因此,基本上,不需要在函数定义中出现默认值

答案 1 :(得分:0)

先生,您的代码非常明显,但请尝试使用以下更简单的代码,它们提供相同的输出并且易于理解

#include<stdio.h>
#include<stdlib.h>

int count_key1(int* a,int size,int key,int flag)
{
        int count=0,i;
        for(i=0; i<size; i++) { if (a[i] == key)  count++; }
        return count;
}
int main()
{
        int b[30]={1,4,2,3,2,6,6,9},key1=9,result;
        result=count_key1(b,8,key1,0);
        printf("%d is %d times present",key1,result);
        return 0;
}

答案 2 :(得分:0)

int count(int num, int* arr, int length) {
    if (!length)
        return 0;
    int c = count(num, arr+1, length-1);
    return arr[0] == num? c + 1: c;
}

int main(void) {
int arr[10] = {3,4,1,2,4,5,6,5,4,5};

std::cout << count(2, arr, 10);

return 0;
}