Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

помогите,исправить ошибку)программа выводит первые 20 чисел Фибоначчи, но их среднее значение почему-то выводит неправильно...

84K
05 апреля 2013 года
smile))
12 / / 05.04.2013
Код:
public class Task4 {
   public static void main (String args[]) {
      int n = 3;          // the index n for F(n), starting from n=3
      int fn;             // F(n) to be computed
      int fnMinus1 = 1;   // F(n-1), init to F(2)
      int fnMinus2 = 1;   // F(n-2), init to F(1)
      int nMax = 20;      // maximum n, inclusive
      int sum = fnMinus1 + fnMinus2;
      double avr=0;

     
      System.out.println("The first " + nMax + " Fibonacci numbers are:");
      System.out.print(fnMinus1+ " " + fnMinus2);
   
   
      while (n <= nMax) {
          sum = fnMinus1 + fnMinus2;
          fnMinus1= fnMinus2;
          fnMinus2=sum;
              System.out.print(" " + sum);
              n++;
      }
      {
          System.out.println(avr=sum/20);

              {
             
          }
      }
   }
}
53K
07 апреля 2013 года
transParent
18 / / 12.08.2012
Smile, а Вы случайно не забыли в цикле сделать

 
Код:
avr += sum;
?
414
08 апреля 2013 года
CassandraDied
763 / / 24.05.2012
System.out.println(avr=sum/n);
89K
08 апреля 2013 года
D.Uran
4 / / 05.04.2013
Имхо, сумма ряда Фибоначчи не есть его последний член. Почти каждый член ряда попадает в сумму дважды. Надо честно ввести отдельную переменную TotalSum в которой собрать истинную сумму. Примерно так, проверьте:

Код:
public class Task4 {
public static void main (String args[]) {
int n = 3; // the index n for F(n), starting from n=3
int fn; // F(n) to be computed
int fnMinus1 = 1; // F(n-1), init to F(2)
int fnMinus2 = 1; // F(n-2), init to F(1)
int nMax = 20; // maximum n, inclusive
int sum = fnMinus1 + fnMinus2;
double avr=0;

int TotalSum = 2; // TotalSum init = fnMinus1+fnMinus2 = 1+1


System.out.println("The first " + nMax + " Fibonacci numbers are:");
System.out.print(fnMinus1+ " " + fnMinus2);


while (n <= nMax) {
sum = fnMinus1 + fnMinus2;
fnMinus1= fnMinus2;
fnMinus2=sum;
TotalSum= TotalSum + sum;
System.out.print(" " + sum);


n++;
}
{
System.out.println(avr=TotalSum/nMax);

{

}
}
}
}
84K
09 апреля 2013 года
smile))
12 / / 05.04.2013
public class Fibonacci { //saved as "Fibonacci.java"
2. public static void main (String args[]) {
3. int n = 3; // The index n for F(n), starting from n=3.
4. int fn; // F(n) to be computed.
5. int fnMinus1 = 1; // F(n©\1), init to F(2).
6. int fnMinus2 = 1; // F(n©\2), init to F(1).
7. int nMax = 20; // Maximum n, inclusive.
8. int sum = 2; // initialize the sum to 2, F(0)+F(1)==2.
9. double average; 11. System.out.println("The first " + nMax + " Fibonacci numbers are:");
12. //print out the first two initialized Fibonacci number.
13. System.out.print(fnMinus1 + " ");
14. System.out.print(fnMinus2 + " ");
15.
16. while (n <= nMax) {
17. // Compute F(n), print it and add to sum.
18. fn = fnMinus1 + fnMinus2;
19. System.out.print(fn + " ");
20. sum += fn;
21. // Adjust the index n and shift the numbers.
22. n++;
23. fnMinus2 = fnMinus1;
24. fnMinus1 = fn;
25. }
26. System.out.println();
27. // compute and display the average (=sum/nMax)
28. average = (double)sum / nMax;
29. System.out.println("The average is " + average);
30. }
31. }
вот код)он работает)но можете объяснить этот код, особенно начиная с while...) зачем мы приравниваем fnMinus2 = fnMinus1; fnMinus1 = fn; ???
20K
09 апреля 2013 года
ellor!
198 / / 24.05.2012
Цитата: smile))
зачем мы приравниваем fnMinus2 = fnMinus1; fnMinus1 = fn; ???


Затем, что так вычисляются числа Фибоначчи.

89K
09 апреля 2013 года
D.Uran
4 / / 05.04.2013
// n-ный член ряда
fn = fnMinus1 + fnMinus2;
// добавляем его в сумму
sum += fn;

// сдвигаемся на один член ряда вперед.
n++;
fnMinus2 = fnMinus1;
fnMinus1 = fn;

В текущей итерации три последовательных члена ряда Фибоначчи у вас
fnMinus2, fnMinus1; fn
На следующей итерации
fnMinus1, fn, (fnMinus1 + fn)
то есть, в цикле должно быть
fnMinus2 = fnMinus1; fnMinus1 = fn;

// в комментах это все было написано
На этот раз у вас нумерация членов fnMinus1, fnMinus2 противоположна предыдущему коду. Это создает некоторую путаницу. Хотя оба они будут работать. Просто определитесь.
84K
10 апреля 2013 года
smile))
12 / / 05.04.2013
спасибоо)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог