Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Рекурсия, печать массива в обратном порядке


Автор: nekstv 4.11.2006, 00:26
Помогите написать рекурсивную функцию которая печатает массив в обратном порядке. Функция принимает массив  и размер массива и ничего не возвращает. Функция прекращает свою работу и возвращаеться, если принимаемый массив имеет нулевой размер.

Автор: Kuvaldis 4.11.2006, 00:32
nekstv, 
Код

void print_rec(char* mas, int n)
{
    if (n == 0)  
       return;

    print_rec(mas + 1, n - 1);
    cout << mas[0];
}

Автор: nekstv 21.12.2006, 00:14
У меня эта прога, что-то не работает, пишет ошибку, типа того, что не хватает функции main???

Автор: TaNK 21.12.2006, 09:30
Цитата(nekstv @ 21.12.2006,  00:14)
У меня эта прога, что-то не работает, пишет ошибку, типа того, что не хватает функции main???

так добавь функцию main и вызов функции print_rec с двумя параметрами!

Автор: V.A.KeRneL 21.12.2006, 11:06
nekstv, вообще-то, ты, действительно, просил только функцию, но если тебе нужна готоваая прога, то нет ничего проще: 
Код

#include <iostream>
#include <cstring>
using namespace std;

void 
print_rec(char * mas, int n) 
{ 
    if (n == 0) 
        return;
    
    print_rec(mas + 1, n - 1);
    cout << mas[0];
}

int 
main(void) 
{ 
    char str[] = "TRAM-PAM-PAM...))";
    
    print_rec((char *) str, strlen((char *) str));
    
    return (0);
}


Автор: nekstv 21.12.2006, 23:58
Спасибо большое, все работает!

Автор: Denzel666 22.12.2006, 00:52
а можно написать то же тока без printf...getchar?Работа с динамической памятью...

Автор: Denzel666 23.12.2006, 02:27
Я вот это имел в виду если что:

Код

// Рекурсивная ф-ция, печатающая стринг в прямом и обратном порядке


#include <stdio.h>
#include <string.h>
//функция печатает строку в прямом и обратном порядке
print_direct_and_reverse(const char *str, int length)
{
 //терминальное условие рекурсии - когда строка становится нулевой длины
 if(length == 0)
 {
  //тогда переходим на новую строку, чтобы 
  //реверсированная строка напечаталась на новой строке
  putchar('\n');
  return;
 }
 putchar(*str);  //этот символ будет выводится в строке с прямым порядком
 //вызываем эту же функцию, передавая ей сдвинутый на 1 вперёд указатель и уменьшенную длину
 print_direct_and_reverse(str+1, length-1);
 putchar(*str); //а этот символ будет выводиться в строке с обратным порядком при "раскрутке" рекурсии
 
}
void main()
{
 char *str = "abcSAD";
 //применение написанной функции
 print_direct_and_reverse(str, strlen(str));
 putchar('\n');
}





И сразу извиняюсь за оффтоп...Как выбрать не С++ а Си?
ПРошу оценить и с радостью прочитаю критику если что не так...Помогите подправить комментарии где необходимо...заранее Спасибо !!

Автор: V.A.KeRneL 23.12.2006, 09:56
Denzel666, в принципе, всё првильно.
Особенно, приятно, что сам допёр (если сам). Молодец!
Единственное, что бы я исправил, это функция main(): 
1. Возвращаемое значение и аргументы: int main(void)
2. Cоответственно, в конце надо добавить return (0);
3. Ты ведь просил getchar() и работу с динамической памятью... Я бы добавил, если бы мне было надо, а если не надо -- не писал бы, что типа надо... smile

Цитата(Denzel666 @  23.12.2006, 02:27 Найти цитируемый пост)

Как выбрать не С++ а Си?

В том-то и дело что пока никак!
Надо админов просить, чтоб переименовали хотя бы «C++» в «C/C++», как это обстоит с Паскалем и Дельфи.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)