Сигнал ошибки сегментации 11 - PullRequest
1 голос
/ 19 января 2020

Я решаю проблему, чтобы найти общее количество нет. для получения заданной общей суммы денег для пользователя данного номинала

#include<stdio.h>
int denomination(int amt,int coin[],int n){
    //int sum=0;
    if(amt==0){
        return 1;
    }
    else if(amt<0)return 0;
    else{
        int include=denomination(amt-coin[n-1],coin,n);
        int exclude=denomination(amt,coin,n-1);
        return include+exclude;
    }

}

int main()
{
    //  Insert your code here.
    int t,amt,n,coin[100];
    scanf("%d",&n);
    for(int i=0;i<n;i++){
    scanf("%d",&coin[i]);
    }
    scanf("%d",&t);
    while(t--){
        scanf("%d",&amt);
        int a=denomination(amt,coin,n);
        printf("%d\n",a);

    }
    return 0;
}

Я реализовал этот код и получаю ошибку сегментации кода

1 Ответ

2 голосов
/ 19 января 2020

Эта строка вызывает проблему: int exclude=denomination(amt,coin,n-1);, потому что amt все равно, как есть, и n уменьшается без базового варианта. Представьте, что n стало 0, и вы должны получить доступ к coins[n-1] в этом вызове: denomination(amt-coin[n-1],coin,n);

Пожалуйста, еще раз пересмотрите ваши базовые случаи.

...