Консультация № 98740
17.08.2007, 16:59
0.00 руб.
0 3 3
Здравствуйте! В приложении текст программы, рекурсивно распечатывающей строку "TRAM-PAM-PAM...". Объясните пожалуйста, как разворачивается эта рекурсия и почему результат программы -"...MAP-MAP-MART"

Приложение:
#include <iostream>using namespace std;void Display(char * mas, int n) { if (n == 0) return; Display(mas + 1, n - 1); cout << mas[0];}int main(void) { char str[] = "TRAM-PAM-PAM..."; Display(str, strlen(str)); return (0);}

Обсуждение

Неизвестный
17.08.2007, 17:05
общий
это ответ
Здравствуйте, Rockie!
Судя по коду ты уходишь на самый низ рекурсии (то бишь доходишь до последнего элемента массива)

а только потом начинаешь вывод на экран.

ссответственно получается вывод наоборот

поменый местами вывод символа экран и рекурсивный вызов
Неизвестный
17.08.2007, 18:54
общий
это ответ
Здравствуйте, Rockie!
Просто строка напечатана в обратном порядке,
чтобы было понятнее работа рекурсии.
Сначала рекурсивный вызов Display доводит
указатель строки str до ее конца, а потом с этого
конца опять же по рекурсии начинается распечатка.
Удачи!
Неизвестный
18.08.2007, 09:37
общий
это ответ
Здравствуйте, Rockie!
В приложении исправленный листинг

Приложение:
#include <iostream>using namespace std;void Display(char * mas, int n) { if (n <= 0) return; cout << mas[0]; //это должно быть здесь Display(mas + 1, n - 1);// cout << mas[0];}int main(void) { char str[] = "TRAM-PAM-PAM..."; Display(str, strlen(str)); return (0);}
Форма ответа