Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
1

Рекурсия в Delphi(Pascal) и в C++

16.11.2017, 19:15. Показов 961. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создаю такую тему потому что столкнулся с трудностями при переводе программы с Паскаля на C++. Дело в том что я сначала писал на C++ но рекурсия не работала(работала только в одно сторону) потом решил реализовать алгоритм на паскале и всё получилось. Почему на C++ рекурсия коряво работает?
Delphi
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
uses
  SysUtils;
 
const
    size = 24;
 
type
    intmas = array[1..size] of longint;
    charmas = array[2..size] of char;
 
var
    x: intmas;
    sgnm: charmas;
    n, i: integer;
    s: longint;
    flag: boolean;
 
procedure rec(k: integer; sum: longint);
begin
    //writeln('in');
    if k > 1 then
    begin
        sgnm[k] := '+';
        rec(k - 1, sum + x[k]);
        sgnm[k] := '-';
        rec(k - 1, sum - x[k]);
    end
    else
    begin
        if sum + x[1] = s then
        begin
            //flag := true;
            for i := 1 to n do
            begin
                if (i >= 2) and (i <= n) then write(sgnm[i]);
                write(x[i]);
                if i = n then write('=', s);
            end;
            halt;
        end;
    end;
end;
 
begin
    reset(input, 'c:\\input.txt');
    rewrite(output, 'c:\\output.txt');
    read(n, s);
    for i := 1 to n do read(x[i]);
    flag := false;
    rec(n, 0);
    if not flag then write('No solution');
end.
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
#include "stdafx.h"
#include <fstream>
const int size = 24;
long long s, mas[size];
char sgnm[size];
bool flag = false;
std::ifstream fin("c:\\input.txt");
std::ofstream fout("c:\\output.txt");
 
void rec(int k, long long sum)
{
    fout << "in" << std::endl;
    if (k > 0)
    {
        sgnm[k] = '+';
        return rec(k - 1, sum + mas[k]);
        sgnm[k] = '-';
        return rec(k - 1, sum - mas[k]);
    }
    else
    {
        if (sum + mas[0] == s) flag = true;
    }
}
 
int main()
{
    int n;
    fin >> n >> s;
    for (int i = 0; i < n; ++i)
    {
        fin >> mas[i];
    }
    rec(n - 1, 0);
    for (int i = 1; i < n; ++i)
    {
        fout << sgnm[i] << ' ';
    }
    return 0;
}
На C++ как видите я хочу вывести только знаки(+ или -), вывод всего выражения целиком не проблема
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.11.2017, 19:15
Ответы с готовыми решениями:

Перевести в код Pascal ABC из кода Pascal Delphi
procedure TForm1.Button1Click(Sender: TObject); const n=8; var x:array of real; y,z:array of...

Перевести в код Pascal ABC из кода Pascal Delphi
Помогите перевести в код ABC а то с Delphi вообще не знаком. Задание было такое: Записать в файл...

Рекурсия в Pascal
Привет, товарищи. Слезно прошу вашей помощи в понимании рекурсии. Ниже у меня есть программка,...

Рекурсия Pascal
Почему, если список параметров рекурсивной подпрограммы отличается от набора исходных данных...

4
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
16.11.2017, 19:24 2
Лучший ответ Сообщение было отмечено no swear как решение

Решение

return убери.
1
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
16.11.2017, 19:39  [ТС] 3
Спасибо огромное! А в чём разница между return и простой записью имени функции без return-а?
0
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
16.11.2017, 19:58 4
Лучший ответ Сообщение было отмечено no swear как решение

Решение

return это выход из функции
C
1
2
3
4
5
6
7
if (k > 0)
    {
        sgnm[k] = '+';
        return rec(k - 1, sum + mas[k]); //вот тут выход из функции
        sgnm[k] = '-'; //следовательно, этот код и код ниже не выполнится никогда
        return rec(k - 1, sum - mas[k]);
    }
1
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
16.11.2017, 20:05  [ТС] 5
Спасибо за ответ. Очень помогли
0
16.11.2017, 20:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2017, 20:05
Помогаю со студенческими работами здесь

Рекурсия в Turbo Pascal
Разработать программу по алгоритму с использованием рекурсивной функции и без использования...

Turbo Delphi - Delphi (Pascal) | Тема общего характера
Добрый вечер, уважаемые пользователи форума! Подскажите, пожалуйста.. &quot;Интегрированная среда...

Перевод кода с Pascal на Си или С++ (рекурсия)
Здравствуйте, помогите, пожалуйста, перевести код с Pascal на С++, либо на Си. Задание состояло в...

Перевод кода с Pascal на С++ или Си (рекурсия)
Здравствуйте, помогите, пожалуйста, перевести код с Pascal на С++, либо на Си. Задание состояло в...


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

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