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

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

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

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

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

Всем доброго времени суток, простите студента заочника, но я вынужден к вам обратиться за помощью. Мне в институте для зачета преподаватель дал задачу для решения: Функция вызывает сама себя 10 раз. Помогите решить пожалуйста, буду вам очень признателен)))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2010, 22:26     Функция вызывает сама себя 10 раз
Посмотрите здесь:
C++ Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х)
C++ Программа, запускающая сама себя
C++ Как зделать чтоб программа удалила сама себя
C++ Функция компилируется, но вызывает виндовс ошибку
Почему встроенная функция вызывает конструктор копирования? C++
Функция с переменным количеством аргументов вызывает out of memory C++
что делает size_t в данной функции, и сама функция C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
22.12.2010, 14:50     Функция вызывает сама себя 10 раз #16
Nameless One, это он видимо для того, чтобы несколько раз вызывать ф-цию можно было)
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
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
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 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
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
22.12.2010, 16:48     Функция вызывает сама себя 10 раз #19
Цитата Сообщение от Kastaneda Посмотреть сообщение
Еще вариант, ближе к извращению))) зато без переменных-счетчиков.
А в цикле for в функции func переменная i - это у тебя не переменная-счетчик?
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 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);
       }
 }
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
22.12.2010, 17:01     Функция вызывает сама себя 10 раз #21
Kastaneda, не в обиду будет сказано, но я даже не могу решить для себя, что это - эзотерика или быдлокод
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
22.12.2010, 17:08     Функция вызывает сама себя 10 раз #22
Цитата Сообщение от Nameless One Посмотреть сообщение
Kastaneda, не в обиду будет сказано, но я даже не могу решить для себя, что это - эзотерика или быдлокод
Естественно и даже бесспорно такое нельзя применять в работе. "эзотерика или быдлокод" - это творчество)))
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
22.12.2010, 17:36     Функция вызывает сама себя 10 раз #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;
}
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
22.12.2010, 17:39     Функция вызывает сама себя 10 раз #24
ForEveR, тогда уж лучше вынести rec и foo в другой файл, и сделать rec статической функцей, чтобы ее не было видно в других единицах трансляции
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
22.12.2010, 17:41     Функция вызывает сама себя 10 раз #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
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
22.12.2010, 17:45     Функция вызывает сама себя 10 раз #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);
}
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
22.12.2010, 17:45     Функция вызывает сама себя 10 раз #27
Kastaneda, Проверял. До 10 доходит. От 1 до 10

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

Не по теме:

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

Dzhej-Dzhej
Заблокирован
22.12.2010, 17:55     Функция вызывает сама себя 10 раз #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);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2010, 18:02     Функция вызывает сама себя 10 раз
Еще ссылки по теме:
C++ функция возвращающая аргументу его значение сама по себе
Умножить факториал сам на себя 1000000 раз C++
Как вычислить интеграл, если сама функция вычисляется с очень большой погрешностью? (ужасная точность) C++
Странно ведёт себя функция fgets C++
C++ Функция которая принимает в себя 3 числа

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

Или воспользуйтесь поиском по форуму:
Напильнег
480 / 120 / 10
Регистрация: 30.09.2010
Сообщений: 473
22.12.2010, 18:02     Функция вызывает сама себя 10 раз #30
Цитата Сообщение от Nameless One Посмотреть сообщение
Кстати, вот еще вариант для тех, кто компилирует компилятором gcc:
Это не вариант решения задачи, т.к. в нем вызывается 10 раз не функция rec(), а вложенная функция printtimes(...) - еще раз внимательно читаем условие задачи.
Yandex
Объявления
22.12.2010, 18:02     Функция вызывает сама себя 10 раз
Закрытая тема Создать тему
Опции темы

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