Премини към съдържанието
Lombert

Java редицата на Фибоначи задача, Цикли

Препоръчан отговор


Здравейте,
пиша в този форум тъй като не успях сам да реша една задачка, която ми се струва доста интересна. Java изучавам от книжката на гн. Наков, но тъй като 1 месец нямах интернет и решавах само задачките ,които ми бяха по силите, а другите само правих опити да ги реша , и тези които не можех да ги реша си ги записвах на листче, за да се върна на тях. 
 
Задачата е :Напишете програма, която чете от конзолата числото N и отпечатва
сумата на първите N члена от редицата на Фибоначи: 0, 1, 1, 2, 3, 5, 8,
13, 21, 34, 55, 89, 144, 233, 377, ...

Молбата ми е ако има някой, който има време и най вече желание, защото без желание няма как да стане, да ми помогне малко.
Ето това е моят опит: http://pastebin.com/RYkY41Ls

Редактирано от Lombert (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Не съм на "ти" с Java, но ще опитам да подскажа за някои грешки на програмата:

 

  1. Какво ще стане с for цикъла в първата итерация, т.е. i - 1 за i = 0?
  2. При така написан for цикъл няма ли да се отпечатва резултат за всяка итерация?

Според мен по-удачният вариант е да се използва масив, например F[N], и тъй като редицата на Фибоначи изисква две начални стойности, те да се зададат като стойности на F[0] и F[1].

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

    ...
    long a=0, b=1, result=1, sum=0;
    for (int i=1; i<=n; i++) {
        sum += result;
        result = a + b;
        a = b;
        b = result;
    }
    ...
Редактирано от ined (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Здравейте !

 

Приложения от Вас код, за съжаление е доста далеч от решението.

Няколко неща:

1) Програмата трябва да генерира и сумира числата на Фибоначи. Това подсказва за използването на поне два цикъла, вложени по един или друг начин.

2) Задачата може да се реши с итеративни цикли и/или рекурсия. Естеството на числата на Фибоначи предразполагат за второто.

3) При генерирането на числата, ще имаме изключително много повторения. Това ще рече, че за да изчислим 6-то число, трябва да изчислим поне 2 пъти 5-то, 4 пъти 4-тото, 8 пъти 3-тото и т.н. В общи линии нещо от типа 2^(n-1) изчисления, които може да се избегнат, използвайки масив (кеш) за получените резултати.

4)  Прилагам малко набързо писан код, който би трябвало да реши задачата Ви.

package com.sample.base;

import java.util.Scanner;

public class Fib {
	
	private static int[] cache;
	
	/**
	 * Main program
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = -1;
		do {
			System.out.println("Enter N > 0: ");
			N = sc.nextInt();
		} while (N < 0);
		cache = new int[N+1];
		cache[0]=Integer.MIN_VALUE;
		cache[1]=0;
		cache[2]=1;
		System.out.print("Fib Seq (reverse order): ");
		System.out.println("\nSum is: " + fib(N));
	}

	/**
	 * Sum the fibbonachi numbers.
	 * @param n
	 * @return
	 */
	private static int fib(int n) {
		if (n > 0) {
			int nextFib = getNthFibNumber(n);
			System.out.print(nextFib + " ");
			return fib(n-1) +  nextFib;
		} else {
			return 0;
		}
	}
	
	/**
	 * Find and populate the N-th fibbonachi number in the cache.
	 * Dynamic optimization.
	 * @param n
	 * @return
	 */
	private static int getNthFibNumber(int n) {
		if (n > 0) {
			if (cache[n] <= 0 ) {
				cache[n] = getNthFibNumber(n-1) + getNthFibNumber(n-2);
			}
			return cache[n];
		} else {
			return 0;
		}
	}
}

Поздрави !

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

  i = число въведено от клавиатурата
  sum = 0
  a = 0
  b = 1
  while i > 0 do
  begin
    c = a + b
    a = b
    b = c    

    sum = sum + a

    dec(i)
  end

 print(sum)
Редактирано от Ken (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Здравейте, 

Много се извинявам, че се включвам около 4 години по-късно, но го правя, за да може когато на някого му се наложи да търси решението на тази задача в Гугъл, то да може да го намери с по-малко блъсканици от мен.

Нямам претенции за велик програмист, дори напротив, много съм зле и те първа се уча, но кодът работи, та ето го и него:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
    int a=0;
    int b=0;
    int fibonacci=1;
    int n;
    int c=0;


        Scanner input1= new Scanner(System.in);
        System.out.print("n=");
        n=input1.nextInt();

        System.out.print(0);
        System.out.print(" "+1);
   for(int i=3;i<=n;i++){

        a=b;
        b=fibonacci;
        fibonacci = a+b;
        System.out.print(" "+fibonacci);
        c+=fibonacci;
        }
        System.out.println("");
        System.out.println(c+1);
    }
    }

 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Добавете отговор

Можете да публикувате отговор сега и да се регистрирате по-късно. Ако имате регистрация, влезте в профила си за да публикувате от него.

Гост
Напишете отговор в тази тема...

×   Вмъкнахте текст, който съдържа форматиране.   Премахни форматирането на текста

  Разрешени са само 75 емотикони.

×   Съдържанието от линка беше вградено автоматично.   Премахни съдържанието и покажи само линк

×   Съдържанието, което сте написали преди беше възстановено..   Изтрий всичко

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия.