Задача с функцией рекурсивного разбиения (теория чисел) - PullRequest
1 голос
/ 10 декабря 2010

Пример. Допустим, ваш пользовательский ввод 6.
Тогда число последовательностей, которые суммируют до 6, равно 11 (включая 6 самих). :

Проблема, с которой я сталкиваюсь, заключается в том, что она работает, когда пользователь вводит 1 или 6, но в противном случае это далеко, и я не могу понять, почему.

Раздел может дать больше информации по этому вопросу, если это необходимо.

Заранее спасибо.

#include <iostream>

using namespace std;

int sum(double number, int min, int & counter)
{
    int temp=0, n;
    n=number+temp;

    if (number>=(n/2.0)+.5 && (number!=1))
    {
        number --;
        temp ++;
        while (number>=(n/2.0))
        {
            number --;
            temp ++;
            counter ++;
        }
    }
    else if (number==1)
    {
        counter ++;
        return 0;
    }

    sum(n-1, 1,counter);

    return 0;
}

int main()
{
    int counter=1;
    double number;

    cout << "-------------------------------------------------------\n"
         << "Please enter the number: ";

    cin >> number ;
    cout << "\n";

    if (number!=1)
    {
        sum(number, 1, counter);
    }


    cout << "The total number of combinations that result in a sum of "
         << number << " is: " << counter
         << "\n-------------------------------------------------------\n";

    return 0;
}

1 Ответ

1 голос
/ 10 декабря 2010

Я прочитал вики-статью, на которую вы указали, они дают некоторые инструкции, как создать рекурсивную определенную функцию.Это выглядит иначе, чем ваш код.Код ниже работает для меня

#include <iostream>

using namespace std;

int sum(int k, int n)
{
    if(k == 1 || n == 1)
        return 1;

    if(k < n)
        return sum (k, k);
    else if (k == n)
        return 1 + sum (k, k-1);
    else
        return sum (k,n-1) + sum (k-n, n);
}

int main (void)
{
    int counter=1;
    double number;

    cout << "-------------------------------------------------------\n"
         << "Please enter the number: ";

    cin >> number ;
    cout << "\n";

    counter = sum(number, number);

    cout << "The total number of combinations that result in a sum of "
         << number << " is: " << counter
         << "\n-------------------------------------------------------\n";

    return 0;
}

Вы можете проверить этот код здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...