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

Рекурсия - C++

Восстановить пароль Регистрация
 
Valli1
4 / 4 / 0
Регистрация: 14.09.2012
Сообщений: 64
09.02.2013, 21:45     Рекурсия #1
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
#include "stdafx.h"
#include <iostream>
const int n=4;
void swap(int &x,int &x1);
void pt(int* a1,int n1,int z);
int main()
{int a[n]={1,2,3,4};
pt(a,n,23);
system("pause");
return 0;}
void swap(int &x,int &x1,int z){
 
int t=x;
x=x1;
x1=t;}
void pt(int* a1,int n1,int z){
if(z>0){
int j=n1-2;
while(j!=-1&&a1[j]>a1[j+1])j--;
int k=n1-1;
while(a1[j]>a1[k])k--;
swap(a1[j],a1[k]);
int l = j + 1, r = n1 - 1;
while (l<r)
swap(a1[l++],a1[r--]);
pt(a1,n1,z-1);}
for(int i=0;i<4;i++)
std::cout<<a1[i]<<' ';
std::cout<<'\n';
}
Генерация перестановки в лексикографическом порядке. Выдает ошибку:
Ошибка 1error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl swap(int &,int &)" (?swap@@YAXAAH0@Z) в функции "void __cdecl pt(int *,int,int)" (?pt@@YAXPAHHH@Z) Perestanovka.obj
Это как понимать, что нельзя использовать ф-цию swap? Тут можно конечно и в цикле внутри main прокрутить(тогда работает), но хотелось именно рекурсию использовать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2013, 21:45     Рекурсия
Посмотрите здесь:

Рекурсия C++
C++ рекурсия
Рекурсия C++
Рекурсия C++
Рекурсия C++
Рекурсия C++
C++ Рекурсия
C++ Рекурсия

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rivory
146 / 112 / 2
Регистрация: 15.01.2013
Сообщений: 266
09.02.2013, 21:56     Рекурсия #2
Код
void swap(int &x,int &x1);
2 аргумента
Код
void swap(int &x,int &x1,int z)
{ 
    int t = x;
    x = x1;
    x1 = t;
}
3 аргумента

Возможно проблема в этом. Пытаетесь вызвать функцию, к которой есть только заголовок.
Valli1
4 / 4 / 0
Регистрация: 14.09.2012
Сообщений: 64
09.02.2013, 22:43  [ТС]     Рекурсия #3
Да в этом, но не только, в результате выводит 23 штуки: 4321.

Добавлено через 5 минут
Все цикл нужно было перед
C++
1
pt(a1,n1,z-1);
Просто z там где вы исправили по ошибке не в ту ф-цию вставил.

Добавлено через 34 минуты
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
#include "stdafx.h"
#include <iostream>
const int n=4;
void swap(int &x,int &x1);
void pt(int* a1,int n1,int z);
int main()
{int a[n]={1,2,3,4};
pt(a,n,23);
system("pause");
return 0;}
void swap(int &x,int &x1){
 
int t=x;
x=x1;
x1=t;}
void pt(int* a1,int n1,int z){
int j=n1-2;
while(j!=-1&&a1[j]>a1[j+1])j--;
int k=n1-1;
while(a1[j]>a1[k])k--;
swap(a1[j],a1[k]);
int l = j + 1, r = n1 - 1;
while (l<r)
swap(a1[l++],a1[r--]);
for(int i=0;i<4;i++)
std::cout<<a1[i]<<' ';
std::cout<<'\n';
if(z>1){
pt(a1,n1,z-1);}
 
 
}
А, как сделать, чтобы выводилось как из стека, что то тут не правильно.
Yandex
Объявления
09.02.2013, 22:43     Рекурсия
Ответ Создать тему
Опции темы

Текущее время: 11:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru