Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.97
maximus11
Сообщений: n/a
#1

Функция вызывает сама себя 10 раз - C++

21.12.2010, 22:26. Просмотров 4160. Ответов 37
Метки нет (Все метки)

Всем доброго времени суток, простите студента заочника, но я вынужден к вам обратиться за помощью. Мне в институте для зачета преподаватель дал задачу для решения: Функция вызывает сама себя 10 раз. Помогите решить пожалуйста, буду вам очень признателен)))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2010, 22:26     Функция вызывает сама себя 10 раз
Посмотрите здесь:

Почему встроенная функция вызывает конструктор копирования? C++
Функция с переменным количеством аргументов вызывает out of memory C++
C++ Как зделать чтоб программа удалила сама себя
C++ Функция компилируется, но вызывает виндовс ошибку
C++ Ведется набор цифр и надо чтобы программа из него сама сообразило число. То есть что бы программа сама раскидывала их по разрядам.
C++ функция возвращающая аргументу его значение сама по себе
C++ Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
deadlock
375 / 354 / 8
Регистрация: 14.12.2010
Сообщений: 1,265
21.12.2010, 22:29     Функция вызывает сама себя 10 раз #2
C++
1
2
3
4
5
6
int counter=0;
void func()
{
  counter++;
  if (counter<=10) func();
}
maximus11
Сообщений: n/a
21.12.2010, 22:31     Функция вызывает сама себя 10 раз #3
Спасибо очень вам благодарен)))
Напильнег
480 / 120 / 10
Регистрация: 30.09.2010
Сообщений: 473
22.12.2010, 00:50     Функция вызывает сама себя 10 раз #4
deadlock, фи, как не кузяво - через внешнюю переменную каждый второй дурак напишет.

Думается мне, что задача предполагает такое решение:
C++
1
2
3
4
5
6
7
8
9
void func(void)
{
  static unsigned k = 10;
 
  if (k) {
    printf("Recursive call\n");
    k--; func(); k++;
  }
}
deadlock
375 / 354 / 8
Регистрация: 14.12.2010
Сообщений: 1,265
22.12.2010, 00:57     Функция вызывает сама себя 10 раз #5
Напильнег, через статическую переменную изящно?
чем проще - тем меньше вопросов зададут, в условии не сказано: "сумничайте по-максимуму".
easybudda
Эксперт С++
9455 / 5468 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
22.12.2010, 01:05     Функция вызывает сама себя 10 раз #6
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
void func(int left){
    if ( left < 1 )
        return;
    printf("Call of function(%d left).\n", --left);
    func(left);
}
 
#define NUM_CALLING 10
    
int main(void){
    func(NUM_CALLING);
    return 0;
}
Напильнег
480 / 120 / 10
Регистрация: 30.09.2010
Сообщений: 473
22.12.2010, 01:09     Функция вызывает сама себя 10 раз #7
Цитата Сообщение от deadlock Посмотреть сообщение
Напильнег, через статическую переменную изящно?
Да.

Цитата Сообщение от deadlock Посмотреть сообщение
чем проще - тем ...
Через внешнюю перемену - слишком просто.

Добавлено через 2 минуты
Чебуран-мутант, через формальный параметр - это вообще децл.
easybudda
Эксперт С++
9455 / 5468 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
22.12.2010, 01:12     Функция вызывает сама себя 10 раз #8
Цитата Сообщение от Напильнег Посмотреть сообщение
Чебуран-мутант, через формальный параметр - это вообще децл.
Смысл трёх последних слов как-нибудь попроще изложите, если не затруднит...

 Комментарий модератора 
2ALL: Офтопить прекращаем!
Напильнег
480 / 120 / 10
Регистрация: 30.09.2010
Сообщений: 473
22.12.2010, 01:56     Функция вызывает сама себя 10 раз #9
Децл - это единица измерения безразмерная такая. Означает очень мало, в данном случае - очень просто.

Но это я был не прав - на самом деле твое решение тупо не соответствует условию задачи! Сравни: "функция, которая вызывает себя 10 раз" (сама вызывает, без указивок) и "функция, которая вызывает себя столько раз, сколько скажут" (которой мы говорим, чтобы она вызвала себя 10 раз).

Цитата Сообщение от easybudda Посмотреть сообщение
Офтопить прекращаем!
В каждом хорошем деле есть место шутке юмора. Мы же хорошим делом занимаемся?
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
22.12.2010, 03:02     Функция вызывает сама себя 10 раз #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
 
struct recursive
{
public:
   recursive():x(0)
   {
   }
   void print()
   {
       if(x >= 10)
          return;
       cout<<"Recursive call of the function "<< ++x <<'\n';
       print();
   }
private:
   int x;
};
 
int main()
{
    recursive ob;
    ob.print();
    return 0;
}
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
22.12.2010, 09:29     Функция вызывает сама себя 10 раз #11
Как вариант, передать количество раз параметром:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
///////////////////////////////////////////
void func(int k)
{
    if (!k)
        return;
        
    cout << "Recursive call" << endl;
    func(--k);
}
///////////////////////////////////////////
int main()
{
    int x = 10;
    func(x);
    
    return 0;
}
Напильнег
480 / 120 / 10
Регистрация: 30.09.2010
Сообщений: 473
22.12.2010, 11:58     Функция вызывает сама себя 10 раз #12
Еще один чудо-кодер. И куда они все лезут, когда по теме уже я высказался...

ForEveR, сколько раз вызовет себя твой метод, если вызвать его в основной программе второй раз? Ы?

Решение от deadlock обладает тем же недостатком, решение от easybudda вообще условию задачи не удовлетворяет... Мдя, похоже без обработки напильником никак...

Спасибо мне, за то, что я тут есть!

Меня надо слушать!

Путин В.В.
Добавлено через 24 минуты
Цитата Сообщение от dihlofos Посмотреть сообщение
Как вариант, передать количество раз параметром:
Эти грабли уже ломаные выше.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
22.12.2010, 14:28     Функция вызывает сама себя 10 раз #13
Напильнег, А не надо вызывать его второй раз) Если создать новый объект и вызвать - то опять же 10)
ЗЫ Все варианты выполняют задание. Через статик переменную это более топорно чем через функцию как у easybudda.
dihlofos
22.12.2010, 14:39
  #14

Не по теме:

Цитата Сообщение от Напильнег Посмотреть сообщение
Эти грабли уже ломаные выше.
Ох, ё, и правда...

Nameless One
Эксперт С++
5767 / 3416 / 255
Регистрация: 08.02.2010
Сообщений: 7,441
22.12.2010, 14:46     Функция вызывает сама себя 10 раз #15
Цитата Сообщение от Напильнег Посмотреть сообщение
deadlock, фи, как не кузяво - через внешнюю переменную каждый второй дурак напишет.

Думается мне, что задача предполагает такое решение:
C++
1
2
3
4
5
6
7
8
9
void func(void)
{
  static unsigned k = 10;
 
  if (k) {
    printf("Recursive call\n");
    k--; func(); k++;
  }
}
k--, k++ - к чему эти "подергивания"? Лучше уж так сделать:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
void tentimes()
{
    static size_t times = 10;
    
    if(!times)
        return;
    
    printf("tentimes function's been called...\n");
    --times;
    
    tentimes();
}
 
int main()
{
    tentimes();
    exit(0);
}
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
22.12.2010, 14:50     Функция вызывает сама себя 10 раз #16
Nameless One, это он видимо для того, чтобы несколько раз вызывать ф-цию можно было)
Nameless One
Эксперт С++
5767 / 3416 / 255
Регистрация: 08.02.2010
Сообщений: 7,441
22.12.2010, 14:56     Функция вызывает сама себя 10 раз #17
Цитата Сообщение от dihlofos Посмотреть сообщение
Nameless One, это он видимо для того, чтобы несколько раз вызывать ф-цию можно было)
Ну тогда так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void tentimes()
{
    static size_t times = 10;
    
    if(!times)
    {
        times = 10;
        return;
    }
    
    printf("tentimes function's been called...\n");
    --times;
    
    tentimes();
}
Меньше ненужных операций + лучше читается (и понимается) код
Kastaneda
Форумчанин
Эксперт С++
4470 / 2832 / 224
Регистрация: 12.12.2009
Сообщений: 7,202
Записей в блоге: 1
Завершенные тесты: 1
22.12.2010, 16:42     Функция вызывает сама себя 10 раз #18
Еще вариант, ближе к извращению))) зато без переменных-счетчиков.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
void func(unsigned char*);
int main(){
    func(NULL);
    return 0;
}
void func(unsigned char*X){
    unsigned char x=-1;
    for(int i=1;i<=10;i++){
        if(*(&x+(unsigned char)(X-&x))!=x){
            cout<<"FUNC()"<<i<<endl;
            func(&x);
       }
    }
}
Nameless One
Эксперт С++
5767 / 3416 / 255
Регистрация: 08.02.2010
Сообщений: 7,441
22.12.2010, 16:48     Функция вызывает сама себя 10 раз #19
Цитата Сообщение от Kastaneda Посмотреть сообщение
Еще вариант, ближе к извращению))) зато без переменных-счетчиков.
А в цикле for в функции func переменная i - это у тебя не переменная-счетчик?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2010, 16:56     Функция вызывает сама себя 10 раз
Еще ссылки по теме:

Функция должна принять указатель на саму себя C++
C++ Программа, запускающая сама себя
Как вычислить интеграл, если сама функция вычисляется с очень большой погрешностью? (ужасная точность) C++
что делает size_t в данной функции, и сама функция C++
Странно ведёт себя функция fgets C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Kastaneda
Форумчанин
Эксперт С++
4470 / 2832 / 224
Регистрация: 12.12.2009
Сообщений: 7,202
Записей в блоге: 1
Завершенные тесты: 1
22.12.2010, 16:56     Функция вызывает сама себя 10 раз #20
Цитата Сообщение от Nameless One Посмотреть сообщение
А в цикле for в функции func переменная i - это у тебя не переменная-счетчик?
Ну как бы да))) я имел ввиду, что без статичных переменных-счетчиков и аргументов-счетчиков и пр.

Добавлено через 1 минуту
можно цикл переписать "линейно" и получится вообще без счетчиков.

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
void func(unsigned char*X){
    unsigned char x=-1;
        if(*(&x+(unsigned char)(X-&x))!=x){
            cout<<"FUNC()"<<1<<endl;
            func(&x);
       }
       if(*(&x+(unsigned char)(X-&x))!=x){
            cout<<"FUNC()"<<2<<endl;
            func(&x);
       }
       if(*(&x+(unsigned char)(X-&x))!=x){
            cout<<"FUNC()"<<3<<endl;
            func(&x);
       }
       if(*(&x+(unsigned char)(X-&x))!=x){
            cout<<"FUNC()"<<4<<endl;
            func(&x);
       }
       if(*(&x+(unsigned char)(X-&x))!=x){
            cout<<"FUNC()"<<5<<endl;
            func(&x);
       }
       if(*(&x+(unsigned char)(X-&x))!=x){
            cout<<"FUNC()"<<6<<endl;
            func(&x);
       }
       if(*(&x+(unsigned char)(X-&x))!=x){
            cout<<"FUNC()"<<7<<endl;
            func(&x);
       }
       if(*(&x+(unsigned char)(X-&x))!=x){
            cout<<"FUNC()"<<8<<endl;
            func(&x);
       }
       if(*(&x+(unsigned char)(X-&x))!=x){
            cout<<"FUNC()"<<9<<endl;
            func(&x);
       }
       if(*(&x+(unsigned char)(X-&x))!=x){
            cout<<"FUNC()"<<10<<endl;
            func(&x);
       }
 }
Yandex
Объявления
22.12.2010, 16:56     Функция вызывает сама себя 10 раз
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru