почему ошибка ошибки сегментации в рекурсивной функции - PullRequest
0 голосов
/ 14 января 2020

Привет, я написал этот код, и цель в том, чтобы увидеть, является ли слово "палиндром" или нет, я получаю ошибку сегментации при выполнении, вы можете помочь? Это хороший способ узнать, является ли слово "палындром"? спасибо заранее

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

int m=1;

void palindromi();

int main (int argc, char *argv[]) {

    int len, a, i=0;

    if (argc != 2)
        exit(0);

    len = strlen(argv[1]);
    a = len-1;
    printf("La lunghezza della parola e' %d\n",len);

    palindromi(argv[1], len, a, i);

    return 0;
}

void palindromi(char *parola, int len, int a, int i) {

    if (i < len/2){
        if (parola[i] == parola[a]) {
            palindromi(parola, len, a--, i++);
        }
        else
            m = 0;
    }

    if (m == 1)
        printf("La parola e' palindroma\n");
    if (m == 0)
        printf("La parola non e' palindroma\n");
}

1 Ответ

1 голос
/ 15 января 2020

Как указано в Порядок операций для предварительного увеличения и последующего увеличения в аргументе функции? , последующее увеличение и уменьшение выполняются после вызова функции.
In ваш случай, palindromi(parola, len, a--, i++); - это то же самое, что вызов навсегда palindromi(parola, len, a, i);, который является бесконечным l oop.
Это должен был быть palindromi(parola, len, --a, ++i);, корректно изменяющий значение перед рекурсивным вызовом.

...