Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

Программа, запускающая сама себя - C++
Требуется, чтобы программа запустила сама себя. Использую: system("start programma.exe"); Но при изменении названия файла такая функция...

Как зделать чтоб программа удалила сама себя - C++
Привет всем. У меня собственно такой вопрос: Как зделать чтоб программа удалила сама себя? Я имею в виду, чтоб после запуска,...

Функция компилируется, но вызывает виндовс ошибку - C++
int main() int r=replace(str, c1, c2); return 0; int replace(char *str, char c1, char c2) { int count=0; ...

Почему встроенная функция вызывает конструктор копирования? - C++
Почему встроенная функция вызывает конструктор копирования или всегда ли встроенная функция действительно встроеннаая? Но всё по порядку....

Функция с переменным количеством аргументов вызывает out of memory - C++
property(string & name_c, short nesting_c, string & level1, ...) { nesting=nesting_c; name=name_c; va_list p; ...

37
dihlofos
Бродяга
304 / 258 / 17
Регистрация: 27.08.2010
Сообщений: 553
22.12.2010, 14:50 #16
Nameless One, это он видимо для того, чтобы несколько раз вызывать ф-цию можно было)
0
Nameless One
Эксперт С++
5783 / 3432 / 255
Регистрация: 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
Kastaneda
Jesus loves me
Эксперт С++
4755 / 2959 / 243
Регистрация: 12.12.2009
Сообщений: 7,514
Записей в блоге: 2
Завершенные тесты: 1
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
Nameless One
Эксперт С++
5783 / 3432 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
22.12.2010, 16:48 #19
Цитата Сообщение от Kastaneda Посмотреть сообщение
Еще вариант, ближе к извращению))) зато без переменных-счетчиков.
А в цикле for в функции func переменная i - это у тебя не переменная-счетчик?
0
Kastaneda
Jesus loves me
Эксперт С++
4755 / 2959 / 243
Регистрация: 12.12.2009
Сообщений: 7,514
Записей в блоге: 2
Завершенные тесты: 1
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
Nameless One
Эксперт С++
5783 / 3432 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
22.12.2010, 17:01 #21
Kastaneda, не в обиду будет сказано, но я даже не могу решить для себя, что это - эзотерика или быдлокод
0
Kastaneda
Jesus loves me
Эксперт С++
4755 / 2959 / 243
Регистрация: 12.12.2009
Сообщений: 7,514
Записей в блоге: 2
Завершенные тесты: 1
22.12.2010, 17:08 #22
Цитата Сообщение от Nameless One Посмотреть сообщение
Kastaneda, не в обиду будет сказано, но я даже не могу решить для себя, что это - эзотерика или быдлокод
Естественно и даже бесспорно такое нельзя применять в работе. "эзотерика или быдлокод" - это творчество)))
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
22.12.2010, 17:36 #23
Можно.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
void rec(int x)
{
    if(x >= 10)
       return;
    std::cout<<"Recurive call of function rec number "<< ++x <<'\n';
    rec(x);
}
 
void foo()
{
    int x=0;
    rec(x);
}
 
int main()
{
    foo();
    return 0;
}
0
Nameless One
Эксперт С++
5783 / 3432 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
22.12.2010, 17:39 #24
ForEveR, тогда уж лучше вынести rec и foo в другой файл, и сделать rec статической функцей, чтобы ее не было видно в других единицах трансляции
0
Kastaneda
Jesus loves me
Эксперт С++
4755 / 2959 / 243
Регистрация: 12.12.2009
Сообщений: 7,514
Записей в блоге: 2
Завершенные тесты: 1
22.12.2010, 17:41 #25
ForEveR,
Bash
1
2
3
4
5
6
$./a.exe
Recurive call of function rec number 1
Recurive call of function rec number 3
Recurive call of function rec number 5
Recurive call of function rec number 7
Recurive call of function rec number 9
0
Nameless One
Эксперт С++
5783 / 3432 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
22.12.2010, 17:45 #26
Кстати, вот еще вариант для тех, кто компилирует компилятором gcc:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
 
void rec()
{
    void printtimes(const char* str, size_t times)
    {
        if(!times)
            return;
        
        puts(str);
        printtimes(str, --times);
    }
    
    printtimes("Hello, World!", 10);
}
 
int main()
{
    rec();      
    exit(0);
}
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
22.12.2010, 17:45 #27
Kastaneda, Проверял. До 10 доходит. От 1 до 10

Nameless One, да, это будет лучше.
0
Kastaneda
22.12.2010, 17:52
  #28

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
Kastaneda, Проверял. До 10 доходит.
ForEveR, так ты исходник подредактировал)) Там была "опечатка", я на нее хотел указать)

0
Dzhej-Dzhej
Заблокирован
22.12.2010, 17:55 #29
ну, если в ход пошел exit(0);
тогда можно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
void func(int i)
{
    std::cout<<i<<std::endl;
    if(i<10) func(++i);
    system("pause");
    exit(0);
} 
int main()
{
    func(1);
}
0
Напильнег
481 / 119 / 10
Регистрация: 30.09.2010
Сообщений: 473
22.12.2010, 18:02 #30
Цитата Сообщение от Nameless One Посмотреть сообщение
Кстати, вот еще вариант для тех, кто компилирует компилятором gcc:
Это не вариант решения задачи, т.к. в нем вызывается 10 раз не функция rec(), а вложенная функция printtimes(...) - еще раз внимательно читаем условие задачи.
0
22.12.2010, 18:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2010, 18:02
Привет! Вот еще темы с ответами:

что делает size_t в данной функции, и сама функция - C++
string toString() { stringstream buffer; for (size_t i = 0; i &lt; left.size() - 1; i++) buffer &lt;&lt; left &lt;&lt; &quot;,&quot;; buffer &lt;&lt;...

функция возвращающая аргументу его значение сама по себе - C++
Глупость, но не иначе не могу объяснить это явление. гуляя по сайтам наткнулся на пузырьковую сортировку и увидел данный код: void...

Умножить факториал сам на себя 1000000 раз - C++
Нужно умножить факториал сам на себя 1 000 000 раз. Попытался сделать 2 файла, где 1й это вычисление факториала к примеру 5 а второй...

Как вычислить интеграл, если сама функция вычисляется с очень большой погрешностью? (ужасная точность) - C++
Нужно вычислить интеграл. Но как вычислить интеграл, если сама функция вычисляется с очень большой погрешностью. Ошибка? Где? #include...


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

Или воспользуйтесь поиском по форуму:
30
Закрытая тема Создать тему
Опции темы

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