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

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

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

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток, простите студента заочника, но я вынужден к вам обратиться за помощью. Мне в институте для зачета преподаватель дал задачу для решения: Функция вызывает сама себя 10 раз. Помогите решить пожалуйста, буду вам очень признателен)))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.12.2010, 22:26
Ответы с готовыми решениями:

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

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

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

37
 Аватар для deadlock
378 / 358 / 23
Регистрация: 14.12.2010
Сообщений: 1,265
21.12.2010, 22:29
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
Спасибо очень вам благодарен)))
0
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
22.12.2010, 00:50
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
 Аватар для deadlock
378 / 358 / 23
Регистрация: 14.12.2010
Сообщений: 1,265
22.12.2010, 00:57
Напильнег, через статическую переменную изящно?
чем проще - тем меньше вопросов зададут, в условии не сказано: "сумничайте по-максимуму".
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
22.12.2010, 01:05
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
Цитата Сообщение от deadlock Посмотреть сообщение
Напильнег, через статическую переменную изящно?
Да.

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

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

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

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

Цитата Сообщение от easybudda Посмотреть сообщение
Офтопить прекращаем!
В каждом хорошем деле есть место шутке юмора. Мы же хорошим делом занимаемся?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
22.12.2010, 03:02
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
Бродяга
 Аватар для dihlofos
315 / 269 / 56
Регистрация: 27.08.2010
Сообщений: 553
22.12.2010, 09:29
Как вариант, передать количество раз параметром:
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
Еще один чудо-кодер. И куда они все лезут, когда по теме уже я высказался...

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

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

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

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

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

Не по теме:

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

0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.12.2010, 14:46
Цитата Сообщение от Напильнег Посмотреть сообщение
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
Бродяга
 Аватар для dihlofos
315 / 269 / 56
Регистрация: 27.08.2010
Сообщений: 553
22.12.2010, 14:50
Nameless One, это он видимо для того, чтобы несколько раз вызывать ф-цию можно было)
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.12.2010, 14:56
Цитата Сообщение от 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
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
22.12.2010, 16:42
Еще вариант, ближе к извращению))) зато без переменных-счетчиков.
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
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.12.2010, 16:48
Цитата Сообщение от Kastaneda Посмотреть сообщение
Еще вариант, ближе к извращению))) зато без переменных-счетчиков.
А в цикле for в функции func переменная i - это у тебя не переменная-счетчик?
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
22.12.2010, 16:56
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.12.2010, 16:56
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Закрытая тема Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru