Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 357, средняя оценка - 4.81
antikiler
0 / 0 / 0
Регистрация: 26.10.2009
Сообщений: 49
#1

Простые примеры программ на рекурсию - C++

19.02.2010, 16:29. Просмотров 51403. Ответов 21
Метки нет (Все метки)

Всем привет! У кого есть простые примеры программ на рекурсию, забросьте пожалуйста!!!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2010, 16:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Простые примеры программ на рекурсию (C++):

Простые примеры программ клиента и сервера - C++
Доброго времени суток нужны простые программы клиента и сервера. например - клиент приконектился к серверу. сервер отдал ему файл ххх в...

Примеры ооп программ - C++
Нужен код любых объектно ориентированных программ на с++

[C/C++] Примеры программ парсеров - C++
Здравствуйте! Скиньте пожалуйста примеры программ парсеров страниц на Си Например погоды или новостей

Примеры программ для закрепления материала - C++
Освоил базу С++. Все функциональное программирование + классы, наследование, виртуальный функции, абстрактные классы, их применение,...

Нужны примеры программ с двумерными массивами - C++
дайте пожалуста пару примеров програм с двумерными массивами

Нужны примеры создания реальных программ - C++
Здравствуйте. Если у кого есть ссылки на материалы повещенные созданию реальных (практичных) приложения для Windows на Visual C++ с...

21
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
19.02.2010, 16:44 #2
Рекурсивное вычисление факториала:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
size_t fact(size_t n)
{
    if(n==0) return 1;
    return n*fact(n-1);
}
 
int main()
{
    std::cout << fact(12) << std::endl;
    return 0;
}
0
insideone
Модератор
Автор FAQ
3643 / 922 / 51
Регистрация: 10.01.2010
Сообщений: 2,480
19.02.2010, 16:44 #3
Рекурсия факториала
unsigned long Fl(9)
{
if( 9 <= 1 )
return 1;
else
return 9 *
Fl( 9 - 1 )


unsigned long Fl(8)
{
if( 8 <= 1 )
return 1;
else
return 8 *
Fl( 8 - 1 )


unsigned long Fl(7)
{
if( 7 <= 1 )
return 1;
else
return 7 *
Fl( 7 - 1 )


unsigned long Fl(6)
{
if( 6 <= 1 )
return 1;
else
return 6 *
Fl( 6 - 1 )


unsigned long Fl(5)
{
if( 5 <= 1 )
return 1;
else
return 5 *
Fl( 5 - 1 )


unsigned long Fl(4)
{
if( 4 <= 1 )
return 1;
else
return 4 *
Fl( 4 - 1 )


unsigned long Fl(3)
{
if( 3 <= 1 )
return 1;
else
return 3 *
Fl( 3 - 1 )


unsigned long Fl(2)
{
if( 2 <= 1 )
return 1;
else
return 2 *
Fl( 2 - 1 )


unsigned long Fl(1)
{
if( 1 <= 1 )
return 1; // STOP
else
return 1 * Fl( 1 - 1 );
}

;
}

;
}

;
}

;
}

;
}

;
}

;
}

;
}



Но факториал это плохой пример, т.к. факториал можно посчитать и без рекурсии (а рекурсия это не гуд вообще то говоря)
Хороший пример - функция считывания файлов из директории. Если она считывает что в папке есть папка то рекурсивно считывает файлы и из неё и так далее в самую глубину
1
darkAngel
Технофашист
217 / 200 / 4
Регистрация: 11.03.2009
Сообщений: 883
19.02.2010, 16:45 #4
Классический пример - вычисление факториала:
C++
1
2
3
4
5
6
int fac(int n)
{
   if (n==0) return 1;
   n=n*fac(n-1);  //Рекурсия
   return n;
}
Добавлено через 32 секунды
))) ))))))))
0
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
19.02.2010, 16:47 #5
Я первый))
Вычисление n-ного числа Фибоначчи:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
size_t fib(size_t n)
{
    if(n==0||n==1) return 1;
    return fib(n-1)+fib(n-2);
}
 
int main()
{
    std::cout << fib(5) << std::endl;
    return 0;
}
0
easybudda
Модератор
Эксперт CЭксперт С++
9698 / 5648 / 964
Регистрация: 25.07.2009
Сообщений: 10,863
19.02.2010, 16:49 #6
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
/* печать числа в двоичном виде */
 
void binPrn(unsigned num){
    if ( num / 2 )
        binPrn(num / 2);
    putchar( num % 2 + '0' );
}
 
int main(void){
    int c;
    
    while ( 1 ){
        printf("Number: ");
        if ( scanf("%d", &c) != 1 || !c )
            break;
        binPrn(c);
        putchar('\n');
    }
    return 0;
}
1
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
19.02.2010, 16:50 #7
insideone, наглядно...
0
insideone
Модератор
Автор FAQ
3643 / 922 / 51
Регистрация: 10.01.2010
Сообщений: 2,480
19.02.2010, 17:01 #8
Цитата Сообщение от Nameless One
insideone, наглядно...
Мне даже стало интересно до какой вложенности можно дойти, однако, я побоялся модераторов

C++
1
2
3
4
5
6
7
8
9
size_t FileCount(DIR CurDir){
   while ( CurDir->end_of_files() )
   {
       if ( (CurObj = CurDir->NextFile()) == DIR )
         Count += FileCount(CurObj);
       else
         Count++;
   }
return Count;
Вот такой псевдокод можно применить к подсчету файлов...
0
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
19.02.2010, 17:05 #9
insideone, тогда логичней будет так:
C++
1
while ( !CurDir->end_of_files() )
0
insideone
Модератор
Автор FAQ
3643 / 922 / 51
Регистрация: 10.01.2010
Сообщений: 2,480
19.02.2010, 17:14 #10
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
2 Nameless One угу, не углядел...

PS. "Чтобы понять рекурсию, нужно сначала понять рекурсию"
3
antikiler
0 / 0 / 0
Регистрация: 26.10.2009
Сообщений: 49
19.02.2010, 18:10  [ТС] #11
как будет выглядет рекурсия которая вычисляет ???
d(1)=0, d(2)=1, d(n)=n*d(n-1)+(-1)^n, n>3
0
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
19.02.2010, 18:18 #12
Как-то так:
C++
1
2
3
4
5
6
7
8
size_t d(size_t n)
{
    if(n==1) return 0;
    if(n==2) return 1;
    size_t temp=(n%2) ? (-1) : 1;
    temp+=n*d(n-1);
    return temp;
}
0
insideone
Модератор
Автор FAQ
3643 / 922 / 51
Регистрация: 10.01.2010
Сообщений: 2,480
19.02.2010, 18:20 #13
C++
1
2
3
4
double d(double n){
   if ( n == 1 ) return 0;
   if ( n == 2 ) return 1;
   return n * d(n-1) + pow(-1, n);
double d(4){
if ( 4 == 1 ) return 0;
if ( 4 == 2 ) return 1;
return 4 *
d(4-1)


double d(3){
if ( 3 == 1 ) return 0;
if ( 3 == 2 ) return 1;
return n *
d(3-1)


double d(2){
if ( 2 == 1 ) return 0;
if ( 2 == 2 ) return 1; // STOP
return 2 * d(2-1)+ pow(-1, 2);
}

+ pow(-1, 3);
}

+ pow(-1, 4);
}

Может так, вы попробуйте главное ж разобраться)
0
antikiler
0 / 0 / 0
Регистрация: 26.10.2009
Сообщений: 49
19.02.2010, 20:17  [ТС] #14
Как будет выглядеть полный код?
0
insideone
Модератор
Автор FAQ
3643 / 922 / 51
Регистрация: 10.01.2010
Сообщений: 2,480
19.02.2010, 20:24 #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include "math.h"
using namespace std;
 
double d(double n){
   if ( n == 1 ) return 0;
   if ( n == 2 ) return 1;
   return n * d(n-1) + pow(-1, n);
}
 
int main(){
   cout << d(4);
}
Так
0
19.02.2010, 20:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2010, 20:24
Привет! Вот еще темы с ответами:

Где найти примеры программ для начинающих - C++
где можно найти веб-c-предлагаемых,программ,для Начинающux

У кого нибудь есть приложение Win32 на c++! Примеры программ, с вводом и выводом данных! чтобы нагляднее было! - C++
У кого нибудь есть приложение Win32 на c++!

Как научиться создавать на C++ простые приложения (очень простые игры)? - C++
Помогите, я хочу научится создавать какието для начала очень простые игры, приложения. но я вооще ничего не знаю :wall: не знаю с чего...

Найти все трехзначные простые числа. Определить функцию позволяющую распознавать простые числа - C++
Найти все трехзначные простые числа. Определить функцию позволяющую распознавать простые числа. Простые числа это когда они делятся только...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.