Последовательность Фибоначчи в обратном направлении - PullRequest
4 голосов
/ 01 апреля 2011

Вот код:

class Fibonacci {
    static final int MIN_INDEX = 1;
    public static void main (String[] args){
        int high = 1;
        int low = 1;
        String jel;
        System.out.println("9: " + high);

    for (int i = 8; i >= MIN_INDEX; i--){
        if (high % 2 == 0)
            jel = " *";
        else 
            jel = " ";
        System.out.println(i + ": " + high + jel);
        high = low + high;
        low = high - low;


    }
}
}

Я хочу сделать эту программу, чтобы записать выходные цифры в обратном порядке.Поэтому я хочу, чтобы не только шаг «i» от последнего к первому, но и числа тоже.

В этом примере выходные данные: 1, 1, 2, 3, 5, 8, например... Но я хочу показать это в такой последовательности: например, ..., 8, 5, 3, 2, 1, 1.

Я пытался изменить максимум и минимум, но я могуне заставляйте эту программу запускать «назад».

Ответы [ 8 ]

6 голосов
/ 27 апреля 2011

Здесь нет Java, но Числа Фибоначчи имеют явно закрытую форму :

f[n_] := N@(GoldenRatio^n - (1 - GoldenRatio)^n)/Sqrt[5];  

Где

GoldenRatio = (1 + Sqrt[5]) / 2

Таким образом, вы можете сделать:

For[i = 10, i > 0, i--,
     Print[f[i]];
  ];  

Вывод:

55.
34.
21.
13.
8.
5.
3.
2.
1.
1.

Редактировать

В качестве примечания Золотое сечение является одним из тех замечательных всепроникающих чисел, которые вы найдете в природе, науке и искусстве.

Вы можете найти золотое сечение от Морские раковины до Парфенона.

2 голосов
/ 01 апреля 2011
int high = 8;
int low = 5;
while (low > 0) {
  System.out.println(high);
  int temp = low;
  low = high - low;
  high = temp;
}
2 голосов
/ 01 апреля 2011

Существует две возможности:

  1. Сохраните числа вместо их печати и в конце напечатайте их в обратном порядке.
  2. Запустите алгоритм вперед, чтобы обнаружить последние два числаа затем создайте и распечатайте серию r на лету, отметив, что r[i]=r[i-2]-r[i-1].
2 голосов
/ 01 апреля 2011

Вы можете вставлять их в массив по мере продвижения, а затем просто перевернуть массив и распечатать их? Не совсем эффективно, но это легко сделать.

0 голосов
/ 01 апреля 2011

Я бы просто прошел последовательность последовательно (т.е. не в обратном порядке) и сохранил бы результаты в коллекции (вероятно, ArrayList). Но нет необходимости сортировать после или даже просматривать список в обратном порядке, вы можете просто добавить каждую новую «запись» в последовательности в позицию 0 в списке, используя:

list.add(0, i + ": " + high + jel);

Это обеспечит сохранение последовательности в обратном порядке.

Это просто еще одно возможное решение.

0 голосов
/ 01 апреля 2011

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

Я только что изменил ваш пример ... запустите его и посмотрите, это поведение выожидаем.

class Fibonacci {
static final int MIN_INDEX = 1;

public static void main(String[] args) {
    int high = 1;
    int low = 1;
    String jel;
    List<String> numbers = new ArrayList<String>();
    numbers.add("9: " + high);

    for (int i = 8; i >= MIN_INDEX; i--) {
        if (high % 2 == 0) {
            jel = " *";
        }
        else {
            jel = " ";
        }
        numbers.add(i + ": " + high + jel);
        high = low + high;
        low = high - low;
    }

    Collections.sort(numbers);
    System.out.println(numbers);
}

}

0 голосов
/ 01 апреля 2011

Вы можете сохранить все элементы в структуре данных, а затем распечатать их в обратном порядке из-за характера последовательности Фибоначчи, поскольку каждое значение (кроме первого и второго) зависит от суммы двух предыдущих значений.

0 голосов
/ 01 апреля 2011

Одним из вариантов будет сохранение выходных данных в массиве по мере продвижения, а затем обратный просмотр массива.

...