Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2011, 22:22   #1
rus_phantom
Пользователь
 
Регистрация: 02.05.2011
Сообщений: 16
По умолчанию Рекурсия и неизвестная ошибка

Задача - посчитать количество счастливых билетиков не используя перебор. Вот что у меня получилось:

Код:
//lucky tickets
#include <stdio.h>

void is_lucky(long *p,int *count)
{
    printf("%d    %d\n",*p,*count);
    if (*p<=999999)        //Если номер билетика меньше 999999
    {
        if ((*p/100000+(*p/10000)%10+(*p/1000)%10)==((*p%1000)/100+(*p%100)/10+*p%10))   //если первые 3 равно последним 3
        {
            printf("%d\n",*p);
            *count=*count+1;        //увеличиваем счетчик
        }
        *p=*p+1;
        is_lucky(p,count);          //Рекурсия
    }
}

int main()
{
    int count=0;
    long t = 1000;
    
    is_lucky(&t,&count);
    
    printf("Count = %d",count);
    getchar();
}
Но после проверки числа 66089 и попытки вызова функции с параметром 66090 происходит вылет программы. В чем подвох?
rus_phantom вне форума Ответить с цитированием
Старый 14.10.2011, 22:37   #2
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Цитата:
Задача - посчитать количество счастливых билетиков не используя перебор.
А чем это решение не перебор? Единственное отличие в том что каждый шаг перебора сопровождается вызовом функции, что, в конечном итоге, приводит на 66090-стой итерации к переполнению буфера.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 14.10.2011, 22:44   #3
rus_phantom
Пользователь
 
Регистрация: 02.05.2011
Сообщений: 16
По умолчанию

Но почему на 2 различных компьютерах переполнение происходит на одном и том же числе? Как можно исправить это?
rus_phantom вне форума Ответить с цитированием
Старый 14.10.2011, 23:01   #4
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Цитата:
Но почему на 2 различных компьютерах переполнение происходит на одном и том же числе?
Выделяется одинаковое количество памяти под стек.
Цитата:
Как можно исправить это?
Использовать цикл или придумать другой алгоритм.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Неизвестная ошибка Just Be Общие вопросы C/C++ 13 02.08.2011 13:34
Не могу скачать файл *.ASX - неизвестная ошибка TwiX Общие вопросы Delphi 2 09.02.2010 19:59
Неизвестная ошибка Syltan Софт 15 22.10.2009 17:34
...Ошибка 101 (net::ERR_CONNECTION_RESET): Неизвестная ошибка... infrared Помощь студентам 0 16.04.2009 17:44
неизвестная ошибка... XAOC-forever Общие вопросы Delphi 1 04.01.2009 14:42