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

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

19.02.2010, 16:29. Показов 69091. Ответов 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
Технофашист
228 / 216 / 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru