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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Welemir
3 / 3 / 0
Регистрация: 26.09.2009
Сообщений: 104
#1

Эээ... рекурсия?( - C++

09.10.2009, 00:46. Просмотров 947. Ответов 10
Метки нет (Все метки)

Всем привет.Пытаемся понять рекурсию ))

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
    int shit(int f) {
        
        int x = 5*f;
        int z = shit(x);
        printf("%d",z);
        
        }
 
 
int main() {
    
    int r;
    r = 8;
    shit(r);
    system("PAUSE");
        
    
    
}
Всё работает,но вот программа закрывается (.В чем может быть причина ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2009, 00:46     Эээ... рекурсия?(
Посмотрите здесь:

Рекурсия C++
Рекурсия=( C++
C++ Рекурсия
Рекурсия C++
Рекурсия C++
Рекурсия C++
рекурсия C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
09.10.2009, 00:52     Эээ... рекурсия?( #2
Мозги кончаются, вот и "закрывается"
Попытайтесь на бумажке её прогнать, пальчиком
Deniska
4 / 4 / 0
Регистрация: 15.04.2009
Сообщений: 29
09.10.2009, 00:53     Эээ... рекурсия?( #3
Может переменная z выходит за рамки?
EnzoMatrix
 Аватар для EnzoMatrix
120 / 120 / 4
Регистрация: 14.03.2009
Сообщений: 462
09.10.2009, 00:53     Эээ... рекурсия?( #4
ну дык, у тебя тут выход из рекурсии совсем не предусмотрен
Welemir
3 / 3 / 0
Регистрация: 26.09.2009
Сообщений: 104
09.10.2009, 00:58  [ТС]     Эээ... рекурсия?( #5
Эээ...а как его сделать ? В рекурсии я пень колода),вот и спрашиваю)).Собсно,в учебнике только примеры.
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
09.10.2009, 01:04     Эээ... рекурсия?( #6
Цитата Сообщение от Welemir Посмотреть сообщение
В рекурсии я пень колода
Ну, тогда, наверное, в итерации соображаете, вот и попробуйте сделать без рекурсии.
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,304
09.10.2009, 02:06     Эээ... рекурсия?( #7
Схема рекурсивных функций

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
funktsia () {
 if (//Некотрое условие) {
  funktsia ()
 }
 //Основной код функции 
}
 
Варианты: 
funktsia () {
 for (//Некотрое условие) {
  funktsia ()
 }
 //Основной код функции 
}
 
funktsia () {
  while (//Некотрое условие) {
   funktsia ()
 }
 //Основной код функции 
}
 
funktsia () {
 if (//Некотрое условие) {
  funktsia ()
 }
 else {
  for (//Некотрое условие) {
    funktsia ()
  }   
 }
   //Основной код функции 
}
 
funktsia () {
 if (//Некотрое условие) {
  funktsia ()
 }
 else {
 //Основной код функции 
 }
}
В общем, можно долго продолжать. Суть ты уловил: функция должна сама себя вызывать не безусловно, а по некоторому условию.
Тема сложная довольно. Упирайся.
xBot01
 Аватар для xBot01
9 / 9 / 1
Регистрация: 25.09.2009
Сообщений: 17
09.10.2009, 06:21     Эээ... рекурсия?( #8
Цитата Сообщение от Х.М.Дейтел/П.Дж.Дейтел
Рекурсивная функция - это функция, которая вызывает саму себя либо непосредственно, либо косвенно( через другую функцию). Для решения задачи вызывается рекурсивная функция. Эта функция в действительности знает только, как решается простейший, так называемый основной случай задачи (или несколько таких случаев). Если рекурсия функции вызывается для решения основного случая, она просто возвращает результат. Если рекурсивная функция вызывается для решения более сложной задачи, она обычно делит задачу на две концептуальные части: одну часть, которую функцию умеет решать, и другую, которую не умеет. Что бы рекурсивное решение было работоспособным, последняя часть должна быть похожа на исходную задачу, но быть по сравнению с ней несколько проще или несколько меньше. Поскольку эта новая задача подобна исходной, функция запускает (вызывает) свой новый экземпляр, который будет работать над меньшей задачей; это называется рекурсивным вызовом или шагом рекурсии.
Пример: вычисление числа фибоначи.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using std::cout;
using std::endl;
 
unsigned long factorial( unsigned long);
 
int main()
{
   cout << "10! = " << factorial( 10 ) << endl;
}
 
unsigned long factorial( unsigned long number )
{
   // Проверить на основной случай
   if( number <= 1 )
      // Основные случаи: ( 0! = 1 ) && ( 1! = 1 ).
      return 1;
   else
      // Рекурсивный шаг
      return number * factorial( number - 1 );
}
Функция factorial() является рекурсивной.
Она вызывает сама себя пока не дойдет до основного случая.
TanT
эволюционирую потихоньку
 Аватар для TanT
464 / 462 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
09.10.2009, 06:36     Эээ... рекурсия?( #9
Цитата Сообщение от xBot01 Посмотреть сообщение
Пример: вычисление числа фибоначи.
Чи́сла Фибона́ччи — элементы числовой последовательности
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597… (последовательность A000045 в OEIS)
в которой каждое последующее число равно сумме двух предыдущих чисел.

xBot01, а у вас всё таки факториал считается
хотя не суть
xBot01
 Аватар для xBot01
9 / 9 / 1
Регистрация: 25.09.2009
Сообщений: 17
09.10.2009, 06:41     Эээ... рекурсия?( #10
Цитата Сообщение от TanT Посмотреть сообщение
Чи́сла Фибона́ччи — элементы числовой последовательности
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597… (последовательность A000045 в OEIS)
в которой каждое последующее число равно сумме двух предыдущих чисел.

xBot01, а у вас всё таки факториал считается
хотя не суть
Извиняюсь за ошибку. Ночь не спал. =)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2009, 14:45     Эээ... рекурсия?(
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,216
Завершенные тесты: 1
09.10.2009, 14:45     Эээ... рекурсия?( #11
Welemir, 1-ое,где return?
2-ое, если будет тоже самое, функцию паузы напиши в другой функции
Yandex
Объявления
09.10.2009, 14:45     Эээ... рекурсия?(
Ответ Создать тему
Опции темы

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