С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
15 / 21 / 8
Регистрация: 05.04.2013
Сообщений: 204
1

Определить, что функция рекурсивная

05.02.2015, 23:05. Показов 573. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Требуется написать программу, которая определит для каждой из заданных процедур, является ли она потенциально рекурсивной.


Технические условия
Входные данные

Первая строка содержит количество процедур n (1 ≤ n ≤ 100) в программе. Далее следуют n блоков, описывающих процедуры. Блоки отделены друг от друга строками, каждая из которых содержит по 5 символов «*» (звёздочка).

Описание процедуры начинается со строки, содержащий её идентификатор, состоящий только из маленьких букв латинского алфавита и цифр. Идентификатор может начинаться как с буквы, так и с цифры. Длина идентификатора от 1 до 100 символов. Далее идёт строка, содержащая число k (k ≤ n) - количество процедур, которые могут быть вызваны описываемой процедурой. Последующие k строк содержат идентификаторы этих процедур - по одному идентификатору в строке.

Различные процедуры имеют различные идентификаторы. При этом ни одна процедура не может вызвать процедуру, которая не описана во входе.

Выходные данные

Для каждой входной процедуры, в порядке, в каком они перечислены на входе, необходимо вывести в отдельной строке название процедуры, затем двоеточие, пробел, затем слово YES, если процедура является потенциально рекурсивной, или слово NO - в противном случае.
Пример входных данных
3
p1
2
p1
p2
*****
p2
1
p1
*****
p3
1
p1
Пример выходных данных
p1: YES
p2: YES
p3: NO
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 <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
const int N=102;
int G[N][N];
string funcname[N];
int cnt=0;
int GetId(string Name)
{
    for(int i=0;i<N;i++)
      if(funcname[i] == Name)
        return i;
 return -1;     
}
inline void PushFunc(string Name)
{
        if(GetId(Name)==-1)
        {   
                cnt++;
        funcname[cnt] = Name;
        }
}
int main() {
    int curn,id,curm;
    int _inf = 1000;
    string NameNode,Name;
    freopen("in.txt","r",stdin);
    cin >>curn;
    for(int i=0; i<=curn+1;i++)
    for(int j=0;j<=curn+1;j++)
         G[i][j]=_inf;
 
    for(int i=1;i<=curn;i++)
     {
        cin>>NameNode;
         PushFunc(NameNode);
         id = GetId(NameNode);
        cin >> curm;
        for(int j=1;j<=curm;j++)
        {
            cin>>Name;
            PushFunc(Name);
            G[id][GetId(Name)]=1;
        } 
        cin >> NameNode;     
     }
 
  for (int k=1; k<curn; ++k)
    for (int i=1; i<=curn; ++i)
        for (int j=1; j<=curn; ++j)
            if (G[i][k] < _inf && G[k][j] < _inf)
                            G[i][j] = min (G[i][j], G[i][k] + G[k][j]); 
                                        
     for( int i=1;i<=curn;i++)
     {
       if(G[i][i]!=_inf)
        cout<< funcname[i] <<": YES"<<endl;
       else 
       cout<< funcname[i] <<": NO"<<endl;   
      }
    return 0;
}
падаюст все тесты, хотя все тесты что я придумал проходя. и Пример тоже проходит, я думаю вывод не правильный.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.02.2015, 23:05
Ответы с готовыми решениями:

Что делает эта рекурсивная функция?
Добрый день. Можете подсказать, что делает эта функция? Явно связана с двоичной системой, но не...

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

Рекурсивная функция.
Доброго времени суток. Мне необходимо написать рекурсивную функцию для решения задачи: Помогите...

Рекурсивная функция
Расскажите пожалуйста про рекурсивную функцию, как она задаётся и всё что с ней связанно. (можно с...

0
05.02.2015, 23:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.02.2015, 23:05
Помогаю со студенческими работами здесь

Рекурсивная функция
Здравствуйте! Осваиваю рекурсивные функции на C++ Написал классический алгоритм (динамическое...

Рекурсивная функция
Здравствуйте, помогите написать программу на языке С++ Для заданного одномерного массива A из N...

Рекурсивная функция C++
Здравствуйте ,помогите реализовать этот пример с помощью рекурсии с++

Рекурсивная функция
Задание: Составить программу для счисления сумы К членов строки, где К определяется ||Uk| -|Um||&lt; е...


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

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