2010-12-10 2 views
1

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

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

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

Заранее благодарен.

#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; 
} 
+0

возможно дубликат [пытаюсь написать рекурсивную функцию, которая подсчитывает количество последовательностей, просуммировать до этого числа C++] (HTTP://stackoverflow.com/questions/4384021/trying-to-write-a-recursive-function-that-counts-the-number-of-sequences-that-sum) – Beta 2010-12-10 07:46:19

+0

Читайте, и вы узнаете об этом не .... – Zud 2010-12-10 07:52:49

ответ

1

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

#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; 
} 

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

Смежные вопросы