Loading...

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

MartinVelev avatar MartinVelev 0 Точки

Fibonacci Numbers- Data Types and Methods

Здравейте, дали случайно бихте могли да предложите кратък алгоритъм за пресмятане на членове от редицата на Фибоначи ,тъй като най-простия метод ,който мога да се сетя е с 4 променливиЗадачата ми все пак работи, но бих желал да съкратя дължината на кода малко.Мерси предварително :)

Тагове:
0
Programming Fundamentals
SashoVasilev avatar SashoVasilev 51 Точки
Best Answer

           var f1 = 0;
            var f2 = 1;
            var fNext = 0;
            for (int i = 1; i <= n; i++)
            {
                 fNext = f1 + f2;
                f1 = f2;
                f2 = fNext;
            }
Този код би трябвало да е ок, ако смятаме, че първият член на числата на Фибоначи е 0. С 3 променливи е и мисля, че това е оптималният вариант.Нека все пак някой колега ако може да се сети за още по-кратък да го сподели.

1
Filkolev avatar Filkolev 4482 Точки

Нямаш проверки какво е n. Ако предположим, че алгоритъмът ще е в метод, който връща стойност, то трябва да се покрият вариантите за първия и втория член, както и за невалидни данни, например отрицателни числа.

2
SashoVasilev avatar SashoVasilev 51 Точки

ето го цялостното решение:
static void Main(string[] args)
        {
            var n = int.Parse(Console.ReadLine());
            if (n == 0)
            {
                Console.WriteLine(1);
            }
            else
            {
                Console.WriteLine(Fibonacci(n));
            }
            

        }
        private static int Fibonacci(int n)
        {
            var f1 = 0;
            var f2 = 1;
            var fNext = 0;
            for (int i = 1; i <= n; i++)
            {
                 fNext = f1 + f2;
                f1 = f2;
                f2 = fNext;
            }
            return fNext;
        }

0
borislav9212 avatar borislav9212 745 Точки

SashoVasilev  По този начин имаш грешка в алгоритъма.  var f1 = 0; -> трябва да е  var f1 = 1; иначе дава грешни резултати

Ето от мен едно решение: цък

0
25/05/2016 18:53:20
vpl2001 avatar vpl2001 54 Точки

Много хубаво решение - хареса ми! Благодаря!

0
SashoVasilev avatar SashoVasilev 51 Точки

Знам .Просто колегата беше помолил за алгоритъм,а не за решение.Не съм гледал условието на задачата. Съвсем спокойно той може с един if да оправи нещата или да направи задачата по твоя начин, въпросът е че просто предложих вариант, по който да се намират числа на фибоначи, а не решение на задачата .smiley

0
tihomirj avatar tihomirj 33 Точки

Ето едно решение с два вложена цикъла. Струва ми се, че е по-интуитивно:

static BigInteger Fib(int n)
        {            
            BigInteger[] arr = new BigInteger[n+1];
            arr[0] = 1UL;
 
            for (int i = 1; i <= n; i++)
                for (int j = (i - 2 >= 0) ? i - 2 : 0; j <= i - 1; j++)
                    arr[i] += arr[j];
 
            return arr[n];
        }
0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.