Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 06.11.2011
Сообщений: 24

Функции. Рекурсия.

29.11.2011, 08:45. Показов 1073. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишем в Microsoft Visual Studio -> Win32 Console Application -> C++. С помощью Рекурсий.

Условие задачи :
Перемещение N дисков может быть легко представлено в терминах перемещения только N-1 диска (и, следовательно, рекурсивно):
1. Переместить N-1 дисков с колышка 1 на колышек 2, используя колышек 3 как место временного размещения.
2. Переместить последний диск ( наибольший ) с колышка 1 на колышек 3
3. Переместить N-1 дисков с колышка 2 на колышек 3, используя колышек 1 как место временного размещения.
Используйте рекурсивную функцию с четырьмя параметрами:
1. Количество дисков, которое должно быть перемещено.
2. Колышек, на который эти диски нанизаны первоначально.
3. Колышек, на который эта группа дисков должна быть перемещена.
4. Колышек, используемый как место временного размещения.
Ваша программа должна печатать четкие инструкции, что нужно делать для перемещения дисков с начального колышка на конечный. Например, чтобы передвинуть группу из трех дисков с колышка 1 на колышек 3, ваша программа должна напечатать следующую последовательность перемещений:
1->3 (это обозначает перенос диска с 1-го колышка на 3-ий)
1->2
3->2
1->3
2->1
2->3
1->3

На сколько я знаю это не много сложней чем ряд Фибоначчи, но как это "выразить" без понятия, очень надеюсь на вашу помощь.
(Кажется такую задачу, с помощью массивов решил всего один человек в мире, если у кого есть ссылка на более детальную информацию буду благодарен! )

Добавлено через 14 часов 23 минуты
Ряд Фибоначчи

C++
1
2
3
4
5
6
7
8
9
    int F (int n)
    {
        if(n<0)
    return 0;
    else if (n==0 || n==1)
        return n;
    else
        return F(n-1) + F(n-2);
    }

Что бы написать перемещение дисков нужно не много поменять ряд (Я так думаю)...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.11.2011, 08:45
Ответы с готовыми решениями:

рекурсия функции
Так выглядит оригинал задания. Найти сумму ряда с точностью эпселент , общий член которого равен n Точность считается достигнутой, если...

Функции (рекурсия)
Помогите, пожалуйста, решить задачи!!!!! Задание №1: Для заданного натурального числа n вычислить n-й член рекуррентной...

Функции рекурсия
Дайте пример рекурсии:wall::cry:

4
0 / 0 / 0
Регистрация: 06.11.2011
Сообщений: 24
30.11.2011, 08:55  [ТС]
Не кто не знает?(
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
30.11.2011, 11:16
Count, поищи в инете ханойские башни - очень известная задача, во всех учебниках про рекурсивные функции она описана.
1
 Аватар для dickivs
48 / 48 / 11
Регистрация: 25.11.2011
Сообщений: 275
30.11.2011, 14:08
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
#include <iostream>
using namespace std;
 
/* Максимальное число колец */
int st[4][64];   /* 1,2,3 - стержни */
int nr[4]; /* Число колец на стержнях */
int nmoves; /* Число перемещений */
/* ---------------------------------------------- 
Печать текущего расположения колец на стержнях 
---------------------------------------------- */
void print_st()
 
{
int i, j;
for(i = 1; i <= 3; i++) {
cout<<endl;
cout<<("| ");
 
for(j = 0; j < nr[i]; j++) cout<<st[i][j];
 
}
cout<<endl;
}
/* ------------------------------------
Установка начального положения колец 
/* ------------------------------------ */
void init(int nrings)
{
for(nr[1] = 0; nrings > 0; nr[1]++,nrings--)
st[1][nr[1]] = nrings;
/* Нанизали кольца на 1-й стержень */
nr[2] = nr[3] = 0;
/* Два других стержня пусты */
nmoves = 0;
print_st();
}
/* ----------------------------- 
Функция переносит одно кольцо 
со стержня n1 на стержень n2 
----------------------------- */
void move1(int n1, int n2)
{
st[n2][nr[n2]++] = st[n1][--nr[n1]];
//  sleep(1); /* Пауза в 1 секунду */
print_st(); /* Печать текущей позиции */
nmoves++;
}
/* ------------------------------------------------- 
Функция hanoi перемещает верхние nrings колец 
со стержня i1 на стержень i3, используя стержень 
i2 в качестве промежуточного. 1 <= i1,i2,i3 <= 3. 
------------------------------------------------- */
void hanoi(int nrings, int i1, int i2, int i3)
{
if(nrings == 1)
move1(i1, i3);
else {
hanoi(nrings-1, i1, i3, i2);
move1(i1, i3);
hanoi(nrings-1, i2, i1, i3);
}
}
void main()
{
int nrings;
cout<<"Number of rings: ";
cin>>nrings;
init(nrings);
hanoi(nrings, 1, 2, 3);
cout<<"End\n";
cout<<"Count of moves: "<<nmoves<<endl; 
 
}
1
0 / 0 / 0
Регистрация: 06.11.2011
Сообщений: 24
30.11.2011, 16:43  [ТС]
Большое спасибо всем за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.11.2011, 16:43
Помогаю со студенческими работами здесь

Рекурсия функции
помогите разобраться с рекурсией #include &lt;iostream&gt; #include &lt;locale.h&gt; #include &lt;math.h&gt; using namespace std; double...

Рекурсия, функции.
Не знаете, как расписать S=1+2+3+4+5... с помощью рекурсии не знаєте як розпсати S=1+2+3+4+5... за допомогою рекурсії Язык...

Рекурсия: вычисление функции Аккермана
Обчислити рекурсивним методом значення математичної залежності, заданої рекурентною формулою, для довільного значення параметрів. ...

Функции. Рекурсия на примере Фибоначчи
Можете начинающему объяснить решен задачи про числа фиибоначи с помощью рекурсии. Вот код // Fibonacci series using recursion ...

Вычисление значения функции, заданной рядом Тейлора (рекурсия)
Требуется написать 2 варианта программы, выполненные по этому заданию: Вычислить и вывести на экран в виде таблицы значения функции,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru