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

Рекурсия, разложение на слогаемые - C++

Восстановить пароль Регистрация
 
Рулик
 Аватар для Рулик
8 / 8 / 0
Регистрация: 14.11.2011
Сообщений: 54
11.01.2012, 05:51     Рекурсия, разложение на слогаемые #1
Нужно подсчитать количество возможных разложение числа на сумму слагаемых количеством больше двух.
Мы водим число и получаем количество представлений.
p(1) = 1
p(2) = 2
p(3) = 3
p(4) = 5
p(5) = 7
p(6) = 11
p(7) = 15
p(8) = 22
p(9) = 30
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
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
int N,K=0;
int number(int);
void main(){
    setlocale(0,"");
    do{
        cout<<"Введите число - ";
        cin>>N;
        if(N<=0)
            cout<<"\nЧисло должно быть больше нуля\n";
    }while(N<=0);
    if(N<=1)
        cout<<"Число нельзя разложить на слогаемые";
    else
        cout<<"Количество представлений ="<<number(N)<<endl;
    system("pause");
}
 
int number(int N){
    int M=0,K=0;
    while(N>=M){
    N--;
    M++;
    K++;
        if(M<N){
            if(N>1)
                K+=number(N);
            if(M>1)
                K+=number(M);
        }   
    }
    return K;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2012, 05:51     Рекурсия, разложение на слогаемые
Посмотрите здесь:

Разложение в ряд C++
LU-разложение C++
Разложение даты C++
Разложение числа C++
Неполное LU разложение C++
Разложение в ряд S(x) и Y(x) C++
Рекурсия. Найти значение функции через разложение в ряд Тейлора C++
C++ LU Разложение

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
11.01.2012, 08:26     Рекурсия, разложение на слогаемые #2
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
#include <iostream>
 
using namespace std;
 
int N,K=0;
int number(int, int);
void main(){
        setlocale(0,"");
        do{
                cout<<"Ââåäèòå ÷èñëî - ";
                cin>>N;
                if(N<=0)
                        cout<<"\n×èñëî äîëæГ*Г® áûòü áîëüøå Г*óëÿ\n";
        }while(N<=0);
        if(N<1)
                cout<<"×èñëî Г*åëüçÿ Г°Г*çëîæèòü Г*Г* ñëîãГ*åìûå";
        else
                cout<<"Êîëè÷åñòâî ïðåäñòГ*âëåГ*ГЁГ© ="<<number(N, N)<<endl;
        system("pause");
}
 
int number(int N, int M){
    if(M==0)
        return 1;        
    if(M<0)
        return 0;
    int K=0;
    for(int i=N; i>0; i--)
        K+=number(i, M-i);
    return K;
}
Yandex
Объявления
11.01.2012, 08:26     Рекурсия, разложение на слогаемые
Ответ Создать тему
Опции темы

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