Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/14: Рейтинг темы: голосов - 14, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67

Постигая рекурсию.

27.04.2010, 19:34. Показов 3671. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошу поправить мою прогу. По заданию должна быть с рекурсией, я понимаю как она работает, но как правильно её написать я не уверен.
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
void inp(int *N, double *X)
{
     
     printf("Sissestage X: ");
     scanf("%d", &X);
     
     FILE *ololo;
     ololo = fopen("f1.txt", "r");
     do
     {
     fscanf(ololo, "%d", &N);
     }
     while(!feof(ololo) && (*N < 15));
}
 
void rec_func(double *H[20], int *i, int *N, double *X)
{    
     double temp;
     double temp2;
     {
     H[0] = 1;
     H[1] = X;
     if (*i == 2)
     {
            do
            {
            H[i] = X * H[i-1] - (i-1) * H[i-2];
            *i = *i+1;
            void rec_func(H, i, N, X);
            while (i < N);
     }
     fclose(ololo);
}
 
void output(char *H, int *X)
{
     FILE *trololo;
     trololo = fopen("f2.txt", "w");
     fprintf("H[0] = 1")
     fprintf("H[2] = %d", &X)
     for (i = 2; i < N; i++);
     {
     fprintf("lf", &H[i]);
     }
     fclose(trololo);
     
     
int main()
{
    int N;
    double X;
    
    //char A[50];
    char H[50];
    inp(&X, &N);
    
    rec_func(H, i, N, X);
    output(H, X);
}
само задание - из файла F1 вводим чило элементов N и просто цифра X, затем при помощи рекурсии по той формуле что в коде находим все H[i] и выводим результат в файл F2
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.04.2010, 19:34
Ответы с готовыми решениями:

Задача на рекурсию
С помощью рекурсии вычислить произведение ненулевых элементов динамического массива. Кто-то знает? Вот такой вот фрагмент есть, но он...

В файл рекурсию
Как мне результаты этой программы вывести в файл ? #include&lt;iostream&gt; #include&lt;fstream&gt; using namespace std; void...

Задача на рекурсию
Вот код проги которую я написал: #include &lt;iostream&gt; using namespace std; int factr(double i){ int answer; if(i==1) ...

43
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
03.05.2010, 15:30
Студворк — интернет-сервис помощи студентам
Нет, выдает 8
Просто она выдаёт их, начиная с нулевого элемента. получается
0 1 2 3 4 5 6 7
А теперь пересчитай их. Насчитаешь 8
0
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
03.05.2010, 15:34  [ТС]
C++
1
2
for (i = 0; i < N; i++) 
       fprintf(fout, "%d\n", pop());
можно так писать в файл из последнего стека?

Добавлено через 1 минуту
о и правда чтото я на счёт N не туда смотрел ))
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
03.05.2010, 15:47
Нет, так не получится. Ведь вы когда выводили стэк на экран, вы уже использовали функцию pop, а она именно вытаскивает элементы из стека, и в самом стеке их не оставляет. Можно модифицировать код так:

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include <stdio.h>
 
#define n 15
 
int tos = 0;
int *stck;
 
void push(int T, int size)
{
    if(tos == size)
    {
        printf("Stack is full\n");
        return;
    }
        
    stck[tos] = T;
    tos++;
}
 
int pop()
{
    if(tos == 0)
    {
        printf("Stack is empty\n");
        return 0;
    }
    
    tos--;
    
    return stck[tos];
}
 
void calcH(int *H, int X, int i, int N)
{
    H[i] = X * H[i - 1] - (i - 1) * H[i - 2];
    i++;
    
    if (i != n)
        calcH(H, X, i, N);
}
 
int main(void)
{
    int A[n];
    int X;
    int H[n];
    int N = 0;
    int S;
    int i;
    
    FILE *fin;
    
    if ((fin = fopen("F1.txt", "r")) == NULL)
    {
        printf("error reading file");
        getchar();
        return -1;
    }
    
    fscanf(fin, "%d", &N);
    
    if (N >= 15)
    {
        printf("ERROR!!!!!!");
        getch();
        return -1;
    }
          
    while(!feof(fin))
        for (i = 0; i < N; i++)
            fscanf(fin, "%d", &A[i]);
    
    
    fclose(fin);
    
    stck = (int *)malloc(N * sizeof(int)); // Çäåñü ïðîèñõîäèò äèíàìè÷åñêîå âûäåëåíèå ïàìÿòè ïîä ñòåê - ìàññèâ öåëûõ ÷èñåë.
                                           // Ôóíêöèÿ malloc(n) âûäåëÿåò êóñîê îïåðàòèâíîé ïàìÿòè ðàçìåðîì n (ñâîåãî àðãóìåíòà) áàéò.
                                           //  äàííîì ñëó÷àå âûäåëÿåòñÿ N * sizeof(int) áàéò, ò.ê. N - âñåãî ëèøü êîëè÷åñòâî
                                           // ýëåìåíòîâ. Åñëè, ñêàæåì, N = 6, òî ôóíêöèÿ malloc(N) âûäåëèò 6 áàéò. Íî íàì æå íóæíî
                                           // çàïèñàòü â âûäåëåííóþ ïàìÿòü íå 6 áàéò, à 6 öåëûõ ÷èñåë, êàæäîå èç êîòîðûõ çàíèìàåò
                                           // 4 áàéòà (ðàçìåð òèïà int). Ò.å. íàì íàäî âûäåëèòü 6 * 4 = 6 * sizeof(int).
                                           // Äàëåå. Çà÷åì (int *). Ôóíêöèÿ malloc âûäåëÿåò ïàìÿòü è âîçâðàùàåò óêàçàòåëü
                                           // íà íà÷àëî âûäåëåííîé ïàìÿòè.  ïðèíöèïå, ìîæíî è íå ïðåîáðàçîâûâàòü åãî òèï
                                           // â òèï "óêàçàòåëü íà int", íî ëó÷øå ýòî ñäåëàòü, ò.ê. ìû âñ¸-òàêè õîòèì ïîëó÷èòü
                                           // â èòîãå ìàññèâ èç N _öåëûõ_ ÷èñåë, à íå ïðîñòî ó÷àñòîê ïàìÿòè ðàçìåðîì N * sizeof(int).
    
    for(i = 0; i < N; i++)
    {
        fscanf(fin, "%d", &A[i]);
        push(A[i], N);
    }
    
    printf("Stack of A:\n");
        for(i = 0; i < N; i++)
                printf("%d\n", pop());
    
    for(i = 0; i < N; i++)
          push(0, N);
          
    tos = 0;
     
    printf("Input X: ");
    scanf("%d", &X);
    
    H[0] = 1;
    H[1] = X;
    
    calcH(H, X, 2, N);
    
    for (i = 0; i < N; i++) // Ó âàñ çäåñü áûëî óñëîâèå i <= N, à íàäî i < N
        printf("H[%d] = %d\n", i, H[i]);
        
    for(i = 0; i < N; i++)
          push(H[i], N);
    
    FILE *fout;
    
    if ((fout = fopen("F2.txt", "w+")) == NULL)
    {
        printf("error writing file");
        getch();
        return -1;
    }
    
    printf("Stack of H:\n");
    
    int temp;
    
    for(i = 0; i < N; i++)
    {
        temp = pop();
        printf("%d\n", temp);
        fprintf(fout, "%d\n", temp);
    }
          
    for (i = 0, S = 0; i < N; i++)
        S += A[i] * H[i];
    
    fprintf(fout, "%d\n", S);
    
    for (i = 0; i < N; i++) // Ó âàñ çäåñü áûëî óñëîâèå i <= N, à íàäî i < N
       fprintf(fout, "H[%d] = %d\n", i, H[i]);
       
    free(stck);
    fclose(fout);
    
    getch();
    return 0;
}
Добавлено через 1 минуту
Т.е. мы вытаскиваем элемент из стека во временную переменную temp, а потом выводим её и на экран, и в файл
1
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
03.05.2010, 16:11  [ТС]
о понятно)) ну думаю всё готово для сдачи, спасибо добрым программистам
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.05.2010, 16:11

Задача на рекурсию
Всем доброго времени суток. Прошу подсказать мне условие задачи на рекурсию(нам дали задание самим придумать себе задание и выполнить...

Задача на рекурсию
Задание : Напишите функцию возведения в степень, которая работала бы как для положительных, так и для отрицательных значений n:...

понять рекурсию
Здравствуйте! Хочу понять рекурсию:) для этого хочу реализовать рекурсивный выход из лабиринта. точка (.) можно ходить, решетка (#) стена,...

Задача на рекурсию
помогите написать пожалуйста программу на с++ по теме рекурсия. Задано действительное A, найти среди чисел 1; 1+1/2; 1+1/2+1/3;.... ...

Задача на рекурсию
Нашел одну задачу, она по моему на рекурсию, но не могу реализовать это. Сколько существует чисел от 1 до n, таких, что цифры числа...


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

Или воспользуйтесь поиском по форуму:
44
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru