Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/348: Рейтинг темы: голосов - 348, средняя оценка - 4.64
 Аватар для antikiler
0 / 0 / 1
Регистрация: 26.10.2009
Сообщений: 49

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

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

Студворк — интернет-сервис помощи студентам
Всем привет! У кого есть простые примеры программ на рекурсию, забросьте пожалуйста!!!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.02.2010, 16:29
Ответы с готовыми решениями:

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

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

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

21
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
19.02.2010, 16:44
Рекурсивное вычисление факториала:
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
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
19.02.2010, 16:44
Рекурсия факториала
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
Технофашист
229 / 217 / 11
Регистрация: 11.03.2009
Сообщений: 887
19.02.2010, 16:45
Классический пример - вычисление факториала:
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
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
19.02.2010, 16:47
Я первый))
Вычисление 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
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
19.02.2010, 16:49
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
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
19.02.2010, 16:50
insideone, наглядно...
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
19.02.2010, 17:01
Цитата Сообщение от 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
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
19.02.2010, 17:05
insideone, тогда логичней будет так:
C++
1
while ( !CurDir->end_of_files() )
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
19.02.2010, 17:14
Лучший ответ Сообщение было отмечено как решение

Решение

2 Nameless One угу, не углядел...

PS. "Чтобы понять рекурсию, нужно сначала понять рекурсию"
3
 Аватар для antikiler
0 / 0 / 1
Регистрация: 26.10.2009
Сообщений: 49
19.02.2010, 18:10  [ТС]
как будет выглядет рекурсия которая вычисляет ???
d(1)=0, d(2)=1, d(n)=n*d(n-1)+(-1)^n, n>3
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
19.02.2010, 18:18
Как-то так:
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
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
19.02.2010, 18:20
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 / 1
Регистрация: 26.10.2009
Сообщений: 49
19.02.2010, 20:17  [ТС]
Как будет выглядеть полный код?
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
19.02.2010, 20:24
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
 Аватар для cibertronic
257 / 144 / 18
Регистрация: 27.12.2009
Сообщений: 909
19.02.2010, 20:40
рекурсия это (из книги по си взял) вызов или использование какой либо функцией или переменной самой себя
вот пример на функцию
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
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
void rec(int,int,int,int);
main()
{
system("title ханойские башни");
 
int n;
system("echo введите количество дисков на первом стержне");
cin>>n;
rec(n,1,2,3);   // функция рекурсии
 
getch();
}
void rec(int n,int i,int j,int w)
{
if(n>1)
{
rec(n-1,i,w,j);    //вот тут и есть рекурсия
rec(1,i,j,w);       //а именно - функция вызывает саму себя
rec(n-1,w,j,i);
}
else cout<<"c "<<i<<" na "<<j<<endl;
return;
}
0
 Аватар для antikiler
0 / 0 / 1
Регистрация: 26.10.2009
Сообщений: 49
19.02.2010, 20:43  [ТС]
а этот!!
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
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
19.02.2010, 20:58
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include "math.h"
using namespace std;
 
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;
}
 
int main(){
   cout << d(4);
}
вот так!! (чувства так и хлещут? )
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
20.02.2010, 07:52
Цитата Сообщение от antikiler Посмотреть сообщение
Всем привет! У кого есть простые примеры программ на рекурсию, забросьте пожалуйста!!!
И вообще, любую корректную рекуррентную формулу уже по определению можно реализовать в виде рекурсивной функции
0
ниначмуроФ
 Аватар для PointsEqual
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
20.02.2010, 23:22
Рекурсия. Функция аккермана:

C++
1
2
3
4
5
6
7
8
int Akk(int m, int n){
     if (!m and n)
     return (n+1);
     else
     if (m and !n)
     return Akk(m-1,1);
     return Akk(m-1,Akk(m,n-1));
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.02.2010, 23:22
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru