2015-03-31 4 views
1
import static java.lang.System.*; 

class NA_False { 
public static void main(String[] args) { 
    int fibonacci = fibo(5); 
    System.out.println(fibonacci); 
} 
static int fibo(int n) { 
    if (n == 0 || n == 1) { 
     out.println(n); 
     return n; 
    } 
    else { 
     int n1 = fibo(n - 1); 
     int n2 = fibo(n - 2); 
     out.println((n1 + n2) + "=" + n1 + "+" + n2); 
     return n1 + n2; 
    } 
} 
} 

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

+1

[посмотреть здесь] (http://imagizer.imageshack.us/a/img440/2996/tu2.png) –

ответ

1

Использование рекурсии это довольно просто -

public static int fibo(int n){ 
     if(n == 1 || n == 2){ 
      return 1; 
     } 

     return fibo(n-1) + fibo(n -2); 
} 

Теперь из основного метода можно назвать его распечатать это -

int fibonacci = fibo(5); 
System.out.println(fibonacci); 

Update: Если вы хотите шаг за шагом результат то вы можете использовать следующее решение, используя для цикла -

public class FiboTest{ 

    public static void main(String[] args){ 

      int term = fibo(17); 
      //1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 
      System.out.println(); 
      System.out.println("Result: " +term); 
    } 

    public static int fibo(int n){ 

      int first = 1; 
      int second = 1; 
      int third = 0; 
      for(int i=1; i<(n-1); i++){ 

       third = first+second; 
       System.out.println(first +" + "+ second +" = "+ third); 

       //update first and second terms 
       first = second; 
       second = third; 
      } 

      return third; 
    } 
} 
+0

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

+0

Я хочу напечатать, как каждый номер добавляется вместе, например, я хочу напечатать, что 8 = 5 + 3. – TheJuggler

0

Проблема в том, что это, вероятно, самый худший способ рассчитать число Фибоначчи. Причина, почему вы видите большинство дополнений несколько раз, потому что вы ДЕЙСТВИТЕЛЬНО качаете их несколько раз.
Обычно вы начинаете с номеров чисел 1 и 2, а затем прокладываете последовательность до тех пор, пока не достигнете необходимого числа.

0

При вычислении fibo(n) рекурсивно он открывает две ветви для каждого вызова. Если мы делаем fibo(5), например, это делает:

fibo(5) = fibo(4) + fibo(3) 

Затем нужно calulcate fibo(4), так что это делает:

fibo(4) = fibo(3) + fibo(2) 

Как вы можете видеть, fibo(3) вызывается дважды. Вот почему вы дважды печатаете 2=1+1. Это также произойдет несколько раз для fibo(2), fibo(1) и т. Д.

Если вы хотите печатать каждую сумму только один раз, вам нужно будет сохранить уже рассчитанные значения или использовать другой метод для вычисления числа Фибоначчи.

Вы можете сделать это итеративно с for цикла:

static int fibo(int n) { 
    int p1 = 0; 
    int p2 = 1; 
    for (int i = 0; i < n; i++) { 
     int tmp = p1 + p2; 
     System.out.println(tmp + "=" + p1 + "+" + p2); 
     p1 = p2; 
     p2 = tmp; 
    } 
    return p2; 
} 

ПримечаниеЭтот возвращает последовательность в виде 1 1 2 3.... Если вам нужна форма 0 1 1 2 3..., вам необходимо заменить return p2 на return p1.

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