2015-08-19 1 views
2

Я пытаюсь написать рекурсивную функцию в Java, которая отображает n-элемент в последовательности математических чисел (1 3 8 18 38 78).Последовательность 1, 3, 8, 18, 38, 78 из рекурсивной функции

Это то, что мне удалось сделать до сих пор:

public static int recfunc(int i) { 
    if(i==1) { return 1; } 
    if(i==2) { return 2+recfunc(i-1); } 
    if(i==3) { return 5+recfunc(i-1); } 
    if(i>3) { return ((2^(i-3))*5)+recfunc(3); } 
    return 0; 
} 

Для расчета п (> 3), вы просто добавить вместе 2^(я-3) от каждого шага (я> 3) а затем добавить 8 в конце. Итак, для 6-го элемента вам нужно будет выполнить этот расчет: 40 + 20 + 10 + 8 = 78.

Проблема с приведенным выше кодом заключается в том, что он успешно вычисляет увеличение числа между двумя n (s), а затем объявления 5 + 2 + 1 (8), но не применяются все предыдущие шаги (20 + 10).

Update:

Я получаю где-то, но это еще не делает то, что должен.

public static int recfunc(int i, boolean param) { 
    if(param==false) { 
     if(i==1) { return 1; } 
     if(i==2) { return 2+recfunc(i-1, false); } 
     if(i==3) { return 5+recfunc(i-1, false); } 
     if(i>3) { param = true; } 
    } 
    if(param==true) { 
     if(i==4) { 
      return ((2^(i-3))*5)+recfunc(i-1, false); } 
     else { 
      return ((2^(i-3))*5)+recfunc(i-1, true); } 
    } 
    return 0; 
} 

ответ

1

Проблема с вашей функцией питания.^в java не означает поднять до власти. Это означает XOR.

Вы можете использовать Math.pow в Java()

int recfunc(int i) { 
    if(i==1) { return 1; } 
    if(i==2) { return 2+recfunc(i-1); } 
    if(i==3) { return 5+recfunc(i-1); } 
    if(i>3) { 
     return ((Math.pow(2,(i-3))*5)+recfunc(i-1)); 
} 
    return 0; 
} 

Надеется, что это помогает.

0

Этот код отлично работает сейчас. Спасибо за вашу помощь!

public static int recfunc(int i, boolean param) { 
    if(param==false) { 
     if(i==1) { return 1; } 
     if(i==2) { return 2+recfunc(i-1, false); } 
     if(i==3) { return 5+recfunc(i-1, false); } 
     if(i>3) { param = true; } 
    } 
    if(param==true) { 
     if(i==4) { 
      return (int)Math.pow(2.0f,(double)(i-3))*5+(int)(recfunc(i-1, false)); } 
     else { 
      return (int)Math.pow(2.0f,(double)(i-3))*5+(int)(recfunc(i-1, true)); } 
    } 
    return 0; 
} 
Смежные вопросы