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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.97
maximus11
Сообщений: n/a
21.12.2010, 22:26     Функция вызывает сама себя 10 раз #1
Всем доброго времени суток, простите студента заочника, но я вынужден к вам обратиться за помощью. Мне в институте для зачета преподаватель дал задачу для решения: Функция вызывает сама себя 10 раз. Помогите решить пожалуйста, буду вам очень признателен)))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
deadlock
 Аватар для deadlock
372 / 351 / 7
Регистрация: 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
 Аватар для deadlock
372 / 351 / 7
Регистрация: 14.12.2010
Сообщений: 1,265
22.12.2010, 00:57     Функция вызывает сама себя 10 раз #5
Напильнег, через статическую переменную изящно?
чем проще - тем меньше вопросов зададут, в условии не сказано: "сумничайте по-максимуму".
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
Бродяга
 Аватар для dihlofos
302 / 256 / 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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
22.12.2010, 14:28     Функция вызывает сама себя 10 раз #13
Напильнег, А не надо вызывать его второй раз) Если создать новый объект и вызвать - то опять же 10)
ЗЫ Все варианты выполняют задание. Через статик переменную это более топорно чем через функцию как у easybudda.
dihlofos
22.12.2010, 14:39
  #14

Не по теме:

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

Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
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
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
22.12.2010, 14:50     Функция вызывает сама себя 10 раз #16
Nameless One, это он видимо для того, чтобы несколько раз вызывать ф-цию можно было)
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
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
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 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
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
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++ Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х)
Функция должна принять указатель на саму себя C++
C++ Программа, запускающая сама себя

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

Или воспользуйтесь поиском по форуму:
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 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 раз
Закрытая тема Создать тему
Опции темы

Текущее время: 00:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru