Exercício 20: Construir um programa que utiliza uma função recursiva verifPalid que verifica se uma string é Palídroma ou não.

Passo 1

Resumo do enunciado: precisamos criar um programa em C que leia uma string e use uma função recursiva chamada verifPalid para testar se ela é palíndroma (lê-se igual de trás para frente). Vamos usar conceitos de recursão e manipulação de índices em strings.

Passo 2

Definição da função recursiva: a ideia é comparar o caractere na posição inicial i com o da posição final j; se forem diferentes devolvemos false, se iguais avançamos i+1 e j−1. O caso base ocorre quando i ≥ j, o que quer dizer que todos os pares já casaram e podemos retornar true.

Passo 3

Protótipo e caso base da função: declaramos
bool verifPalid(const char *s, int i, int j);
No corpo, primeiro testamos se i ≥ j e retornamos true.

Passo 4

Caso recursivo: caso i < j, verificamos se s[i] != s[j]. Se forem diferentes retornamos false. Caso iguais, chamamos recursivamente verifPalid(s, i+1, j-1).

Passo 5

Programa principal: no main lemos a string (com fgets para evitar overflow), calculamos o tamanho (strlen), chamamos verifPalid(s, 0, len-1) e mostramos na tela uma mensagem dizendo se é ou não palíndroma.

Passo 6

Teste: exemplos como “radar” (deve dar palíndroma) e “teste” (não palíndroma) para validar o funcionamento.

Resposta

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

// Função recursiva que verifica se s[i..j] é palíndroma
bool verifPalid(const char *s, int i, int j) {
    // Caso base: índices se cruzaram ou são iguais
    if (i >= j) {
        return true;
    }
    // Se comparar e achar diferente, não é palíndroma
    if (s[i] != s[j]) {
        return false;
    }
    // Caso recursivo: avança nas bordas
    return verifPalid(s, i + 1, j - 1);
}

int main() {
    char s[100];
    // Lê uma linha de até 99 caracteres
    printf("Digite uma string: ");
    if (fgets(s, sizeof(s), stdin) == NULL) {
        return 1;
    }
    // Remove '\n' final, se existir
    size_t len = strlen(s);
    if (len > 0 && s[len - 1] == '\n') {
        s[len - 1] = '\0';
        len--;
    }
    // Chama a função recursiva
    if (verifPalid(s, 0, len - 1)) {
        printf("\"%s\" é palíndroma.\n", s);
    } else {
        printf("\"%s\" não é palíndroma.\n", s);
    }
    return 0;
}

Exercícios relacionados