2013-05-11 2 views
1

Итак, это моя первая функция рекурсии (надеюсь!), И я не уверен, почему она не работает (ака красные линии) какие-либо идеи?Вопрос рекурсии?

int myFactorial(int C) { //underlined, expects ";" 

    int n = Integer.parseInt(objectsChooseField.getText()); 
    int r = Integer.parseInt(chooseFromField.getText()); 

    if (C == 1){ 
     return 1; //underlined, cannot return value from method whose result type is void 
    } 
    return (C*(myFactorial(n/(r(n-r))))); //underlined 
} 
+4

whar вы пытаетесь достичь? факториала или комбинации? –

+0

Независимо от того, что вы пытаетесь сделать, вы должны читать из GUI в _another_ функции, а не с каждой итерацией. –

+0

@BoristheSpider Какой графический интерфейс? – Ingo

ответ

0

OK. Таким образом, у вас есть метод ActionPerformed. Помещенный в коде, как:

private void calculateButtonActionPerformed(java.awt.event.ActionEvent evt) { 
    int n = Integer.parseInt(objectsChooseField.getText()); 
    int r = Integer.parseInt(chooseFromField.getText()); 
    int result = faculty(n)/(faculty(r) * (n - r)); 
    //--- Output result to somewhere 
} 

а сам метод расчета факультета:

/** Computes the faculty of n */ 
public int faculty(n) { 
    if (n > 1) 
    return n * faculty(n - 1); 
    return 1; 
} 
+0

Хорошо, спасибо! Ты определенно мой герой в этот момент! :) – user2344868

10

Здесь: r(n-r).

r не является функцией, а локальной переменной int.

Возможно, вы имели в виду r * (n - r)?

+0

Первоначально это уравнение, которое я должен использовать: C (n, r) = n!/(R! (N-r)) Однако я понял «!» не является корректным оператором в java, но я решил, что буду иметь дело с ним позже. – user2344868

+1

Вам придется написать свой собственный метод для расчета факториала. –

+0

@Boris the Spider - или нет - [релевантная ссылка] (http://blogs.msdn.com/b/oldnewthing/archive/2013/05/08/10416823.aspx), найденная на [reddit] (http://www.reddit.com/r/programming/comments/1dz2gg/mathematics_formulas_are_designed_to_be_pretty/) – Steve314

2

Не следует ли возвратное степенное заявление:

return (C * myFactorial (C - 1)); 
0

Вашего уравнение не устанавливает какую-либо рекурсии. Способность могла быть рассчитана с рекурсией.

public int MyMethod() { 
int n = Integer.parseInt(objectsChooseField.getText()); 
int r = Integer.parseInt(chooseFromField.getText()); 
int result = C(n, r); 
} 

public int C(int n, int r) { 
    int res = faculty(n)/(faculty(r) * (n - r)); 
    return res; 
} 

//--- Computing the faculty itself could be done by recursion :-) 
public int faculty(n) { 
    if (n > 1) 
    return n * faculty(n - 1); 
    return 1; 
} 
+0

Это здорово, однако как я могу разместить его под кнопкой actionPerformed без «redding» из всего моего кода? – user2344868

+0

Поместите линии из «MyMethod» в свой метод actionPerformed(). Вы даже можете интегрировать строку из C() в эту. Таким образом, единственным методом, оставшимся вне actionPerformed, является вычисление факультета. –

+0

правильно, так что, если это не позволит мне редактировать actionPerformed line ...? – user2344868

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