Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/74: Рейтинг темы: голосов - 74, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 02.06.2015
Сообщений: 1
1

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

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

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток, простите студента заочника, но я вынужден к вам обратиться за помощью. Мне в институте для зачета преподаватель дал задачу для решения: Функция вызывает сама себя 10 раз. Помогите решить пожалуйста, буду вам очень признателен)))
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.12.2010, 22:26
Ответы с готовыми решениями:

Зачем функция вызывает саму себя?
#include <stdio.h> #include <vector> int g; bool used; int n, m; //поясните мне эту...

Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х)
Вводим число х. Функция должна вызывать сама себя до тех пор пока sum не станет больше х. Но...

Функция сама себя вызывает бесконечно
Всем привет. Имеется две функции, одна вызывает другую при выборе варианта из селект бокса. Так же...

Поясните. Функция вызывает сама себя без присваивания
static private ArrayList RecConvert(int BigNumber,ArrayList AnswerNumber,int len) { int...

37
377 / 357 / 23
Регистрация: 14.12.2010
Сообщений: 1,265
21.12.2010, 22:29 2
C++
1
2
3
4
5
6
int counter=0;
void func()
{
  counter++;
  if (counter<=10) func();
}
1
0 / 0 / 0
Регистрация: 02.06.2015
Сообщений: 1
21.12.2010, 22:31 3
Спасибо очень вам благодарен)))
0
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
22.12.2010, 00:50 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++;
  }
}
0
377 / 357 / 23
Регистрация: 14.12.2010
Сообщений: 1,265
22.12.2010, 00:57 5
Напильнег, через статическую переменную изящно?
чем проще - тем меньше вопросов зададут, в условии не сказано: "сумничайте по-максимуму".
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
22.12.2010, 01:05 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;
}
0
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
22.12.2010, 01:09 7
Цитата Сообщение от deadlock Посмотреть сообщение
Напильнег, через статическую переменную изящно?
Да.

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

Добавлено через 2 минуты
Чебуран-мутант, через формальный параметр - это вообще децл.
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
22.12.2010, 01:12 8
Цитата Сообщение от Напильнег Посмотреть сообщение
Чебуран-мутант, через формальный параметр - это вообще децл.
Смысл трёх последних слов как-нибудь попроще изложите, если не затруднит...

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

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

Цитата Сообщение от easybudda Посмотреть сообщение
Офтопить прекращаем!
В каждом хорошем деле есть место шутке юмора. Мы же хорошим делом занимаемся?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
22.12.2010, 03:02 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;
}
1
Бродяга
314 / 268 / 56
Регистрация: 27.08.2010
Сообщений: 553
22.12.2010, 09:29 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;
}
0
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
22.12.2010, 11:58 12
Еще один чудо-кодер. И куда они все лезут, когда по теме уже я высказался...

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

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

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

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

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

Не по теме:

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

0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.12.2010, 14:46 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);
}
1
Бродяга
314 / 268 / 56
Регистрация: 27.08.2010
Сообщений: 553
22.12.2010, 14:50 16
Nameless One, это он видимо для того, чтобы несколько раз вызывать ф-цию можно было)
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.12.2010, 14:56 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();
}
Меньше ненужных операций + лучше читается (и понимается) код
1
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
22.12.2010, 16:42 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);
       }
    }
}
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.12.2010, 16:48 19
Цитата Сообщение от Kastaneda Посмотреть сообщение
Еще вариант, ближе к извращению))) зато без переменных-счетчиков.
А в цикле for в функции func переменная i - это у тебя не переменная-счетчик?
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
22.12.2010, 16:56 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);
       }
 }
0
22.12.2010, 16:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2010, 16:56
Помогаю со студенческими работами здесь

Написать рекурсивную функцию, определяющую, сколько раз функция FIB вызывает саму себя
Помогите пожалуйста, не приняли программу, сказав,что она должна выполняться с помощью задания еще...

Создать файл с html формой которая вызывает сама себя
Ребята, очень прошу, помогите пожалуйста с кодом! Только начали изучение языка - разобраться не...

Нужно, чтобы форма распечатала сама себя, или только часть себя
Помогите, плиз! Нужно, чтобы форма (для этого имеется кнопка на форме) распечатала сама себя, или...

Программа, выводящая сама себя
Цель - написать такую программу, используя минимальное количество средств (я знаю только питон,...


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

Или воспользуйтесь поиском по форуму:
20
Закрытая тема Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru