[Мы решаем ваши проблемы с Си и Паскалем ]
Главная » Статьи » Задачи из заказов » Заказ 09.11.07

Написать и протестировать рекурсивную функцию REVERSE(str), которая переворачивает данную строку на том же самом месте.
// 5.24
// Написать и протестировать рекурсивную функцию REVERSE(str), которая
// переворачивает данную строку на том же самом месте. Сравнить время ее работы
// и время работы нерекурсивной версии.

// !!! Остаётся только дагадываться об алгаритме функции REVERSE и как надо
// извратиться, чтоб этот алгаритм стал рекурсивным:)

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

void reverse(char* str)
{
    int len = strlen(str);
    if (len < 2)
        return;

    char beginch = str[0];
    char endch = str[len - 1];

    if (len > 2)
    {
        char* newstr = (char*)malloc(sizeof(char) * (len - 2 + 1));
        strcpy(newstr, str + 1);
        newstr[len - 2] = 0;
        reverse(newstr);
        strcpy(str + 1, newstr);
    }
    
    str[0] = endch;
    str[len - 1] = beginch;
}

void main()
{
    clrscr();

    char ans, *str;

    do
    {
        printf("Vvedite stroku\n");
        gets(str);

        reverse(str);
        printf("Resultat raboti functii:\n%s\n", str);

        printf("Esho raz?(Y/N)\n");
        ans = getch();
        printf("%c\n", ans);
        free(str);
    }
    while (ans == 'Y' || ans == 'y');
}

Категория: Заказ 09.11.07 | Добавил: solver (09.11.2007)
Просмотров: 1899