Здравствуйте, Аноним, Вы писали:
А>работает намана, НО после 2 вызова уже идут ошибки, почему ?
Потому что i перед каждым вызовом хорошо бы обнулить.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: Проблемы с рекурсией в Си
От:
Аноним
Дата:
09.03.03 19:09
Оценка:
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Аноним, Вы писали:
А>>работает намана, НО после 2 вызова уже идут ошибки, почему ?
IT>Потому что i перед каждым вызовом хорошо бы обнулить.
Здравствуйте, Аноним, Вы писали:
IT>>Потому что i перед каждым вызовом хорошо бы обнулить.
А>так static по ходу сам это делает.
Ну да, один раз при первом вызове продцедуры. Погоняй отладчиком сам всё увидишь.
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: Проблемы с рекурсией в Си
От:
Аноним
Дата:
09.03.03 19:40
Оценка:
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Аноним, Вы писали:
IT>>>Потому что i перед каждым вызовом хорошо бы обнулить.
А>>так static по ходу сам это делает.
IT>Ну да, один раз при первом вызове продцедуры. Погоняй отладчиком сам всё увидишь.
А>работает намана, НО после 2 вызова уже идут ошибки, почему ?
Да, статическая переменная, конечно сбрасывается в 0 при запуске программы. но больше она в 0 сбрасываться не будет, а после первого выхова она будет равна не 0, а 1..., после второго — 2 и т.д....
Убедитесь в этом, использовав отладчик.
А вообще, я бы не мучился и написал так:
void revers(char *str,int len)
{
char* szTemp = new char[len];
strcpy(szTemp, str);
for (int i = 0; i < len; i++)
str[i] = szTemp[len-i-1];
}
Здравствуйте, Radich, Вы писали:
R>А вообще, я бы не мучился и написал так:
R>
R>void revers(char *str,int len)
R>{
R> char* szTemp = new char[len];
А delete кто делать будет? И, главное, нафига здесь вообще дополнительные буфера?
[ccode]
void revers(char *str,int len)
{
for (int i = 0; i < len/2; i++)
{
char swp=str[i];
str[i] = str[len-i-1];
str[len-i-1]=swp;
}
}
Здравствуйте, Владик, Вы писали:
В>Здравствуйте, Radich, Вы писали:
R>>А вообще, я бы не мучился и написал так:
R>>
R>>void revers(char *str,int len)
R>>{
R>> char* szTemp = new char[len];
В>А delete кто делать будет? И, главное, нафига здесь вообще дополнительные буфера?
В>[ccode]
В>void revers(char *str,int len)
В>{
В> for (int i = 0; i < len/2; i++)
В> {
В> char swp=str[i];
В> str[i] = str[len-i-1];
В> str[len-i-1]=swp;
В> }
В>}
В>
delete — согласен, забыл. Вообще-то всего-навсего показать то, что рекурсия тут ни к чему, а не продемонстрировать супер-правильный и супер-эффективный код.
А вот на счет буффера — ваше замечание совершенно безосновательное.
Т.к. вся выгода от отсутствия буффера с лихвой компенсируется тем, что у вас в цикле 3 операции вместо 1 у меня.
P.S. Да... Билдеровский форум — это что-то....
Re[4]: Проблемы с рекурсией в Си
От:
Аноним
Дата:
11.03.03 19:03
Оценка:
Здравствуйте, Radich, Вы писали:
R>Здравствуйте, Владик, Вы писали:
В>>Здравствуйте, Radich, Вы писали:
R>>>А вообще, я бы не мучился и написал так:
[----]
R>delete — согласен, забыл. Вообще-то всего-навсего показать то, что рекурсия тут ни к чему, а не продемонстрировать супер-правильный и супер-эффективный код.
да вообщето надо только рекурсия, а так делать нех ...