Сумма всех чисел фибоначчи питон

It’s okay (and encouraged) to ask and answer your own on-topic questions. This is a bad question, any way you slice it. This site is about solving programming problems, not a competition to see who can produce a «one liner».

@roppi ..See the link of the question I provided in the text.. it was also similar but it did help other people..

6 Answers 6

I have the following working solutions:

A. Using lambda() + reduce():

 >>> fib = lambda n: reduce(lambda x, _: x+[x[-1]+x[-2]], range(n-2), [0, 1]) >>> fib(10) >>> [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] 

Note: Not able to use x.append(x[-1]+x[-2]). Gives AttributeError (Don’t know why)

B. Using lambda() + map(): (Have to use a variable for result)

 >>> result = [0,1] >>> fib = lambda n: map(lambda _: result.append(result[-1] + result[-2]), xrange(n-2)) >>> fib(10) ## Ignore its output ## >>> result ## Stores the result ## >> [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] 

I see two problems with your lambda() + reduce() solution. The first is you avoid doing a reduction by ignoring the second lambda() argument and treat reduce() as a simple iterator . The second problem is that fib(1) and fib(2) produce the same result but they shouldn’t.

Читайте также:  Java call methods from main

about your note, that is because x.append(. ) return None because is a operation in place of list, while reduce expect your the function to return a value that is going to be used in the next iteration, for that you can do this (x.append(. ),x)[1]

I see two problems with your lambda() + map() solution. The first is that it doesn’t work in Python 3 as its extreme lazy evaluation doesn’t fill out result until something consumes the result of map() . (E.g. try wrapping your map() in an any() ) The second problem is that fib(1) and fib(2) produce the same result but they shouldn’t.

@Copperfield fib = lambda n: reduce(lambda x, _: x+[x[-1]+x[-2]], range(n-1), [0, 1])[:-1] also works.

Fibonacci using reduce() and lambda()

from functools import reduce def fibonacci(count): sequence = (0, 1) for _ in range(2, count): sequence += (reduce(lambda a, b: a + b, sequence[-2:]), ) return sequence[:count] print(fibonacci(10)) 

Fibonacci using map() and lambda()

def fibonacci(count): sequence = [0, 1] any(map(lambda _: sequence.append(sum(sequence[-2:])), range(2, count))) return sequence[:count] print(fibonacci(10)) 

Code Snippet:

fibonacci = lambda number: number if number  
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181] 

In place of 20, you can give your number. I hope this helps:)

yo can try this for Fibonacci using reduce() and lambda()

def Fib(count): first =[0,1] for i in range(0,count-2): first.append(reduce(lambda x,y : x+y,first[-2:])) print(first) Fib(10) 

output

Here's what might help you! Implemented using reduce() and lambda

from functools import reduce fibonacci_seq = [0, 1] n = 10 reduce(lambda a, b: len(fibonacci_seq) < n and (fibonacci_seq.append(a+b) or a+b), fibonacci_seq) 

(fibonacci_seq.append(a+b) or a+b) : as the .append(ele) returns None , I'm using it to append the next element in the series to the fibonacci_seq . or ing it with a+b allows to return a+b as the result to the reduce() function to operate on it with the next element in the sequence.

print(fibonacci_seq) >>> [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] 

The above method returns the right sequence for n = 2 onwards.

Источник

Числа Фибоначчи: циклом и рекурсией

Числа Фибоначчи – это ряд чисел, в котором каждое следующее число равно сумме двух предыдущих.

Иногда ряд начинают с нуля.

В данном случае мы будем придерживаться первого варианта.

Формула и пример вычисления чисел ряда Фибоначчи

Вычисление n-го числа ряда Фибоначчи с помощью цикла while

Присвоим переменным fib1 и fib2 значения двух первых элементов ряда, то есть единицы.

Получим от пользователя номер элемента, значение которого требуется вычислить. Присвоим номер элемента переменной n .

Поскольку значения первых двух элементов ряда Фибоначчи нам уже известны и вычисления начинаем с третьего, количество проходов по телу цикла должно быть на 2 меньше значения n , то есть n - 2 .

Если пользователь вводит 1 или 2, тело цикла ни разу не выполняется, на экран выводится исходное значение fib2 .

  1. Сложить fib1 и fib2 , присвоив результат переменной для временного хранения данных, например, fib_sum .
  2. Переменной fib1 присвоить значение fib2 .
  3. Переменной fib2 присвоить значение fib_sum .

После окончания работы цикла вывести значение fib2 на экран.

fib1 = 1 fib2 = 1 n = input("Номер элемента ряда Фибоначчи: ") n = int(n) i = 0 while i  n - 2: fib_sum = fib1 + fib2 fib1 = fib2 fib2 = fib_sum i = i + 1 print("Значение этого элемента:", fib2)

Пример выполнения программы:

Номер элемента ряда Фибоначчи: 10 Значение этого элемента: 55
fib1 = fib2 = 1 n = input("Номер элемента ряда Фибоначчи: ") n = int(n) - 2 while n > 0: fib1, fib2 = fib2, fib1 + fib2 n -= 1 print("Значение этого элемента:", fib2)

Вывод ряда чисел Фибоначчи с помощью цикла for

В данном случае выводится не только значение искомого элемента ряда Фибоначчи, но и все числа до него включительно. Для этого вывод значения fib2 помещен в цикл.

fib1 = fib2 = 1 n = int(input()) print(fib1, fib2, end=' ') for i in range(2, n): fib1, fib2 = fib2, fib1 + fib2 print(fib2, end=' ') 
10 1 1 2 3 5 8 13 21 34 55

Рекурсивное вычисление n-го числа ряда Фибоначчи

  1. Если n = 1 или n = 2, вернуть в вызывающую ветку единицу, так как первый и второй элементы ряда Фибоначчи равны единице.
  2. Во всех остальных случаях вызвать эту же функцию с аргументами n - 1 и n - 2. Результат двух вызовов сложить и вернуть в вызывающую ветку программы.
def fibonacci(n): if n in (1, 2): return 1 return fibonacci(n - 1) + fibonacci(n - 2) print(fibonacci(10))

Допустим, n = 4. Тогда произойдет рекурсивный вызов fibonacci(3) и fibonacci(2). Второй вернет единицу, а первый приведет к еще двум вызовам функции: fibonacci(2) и fibonacci(1). Оба вызова вернут единицу, в сумме будет два. Таким образом, вызов fibonacci(3) возвращает число 2, которое суммируется с числом 1 от вызова fibonacci(2). Результат 3 возвращается в основную ветку программы. Четвертый элемент ряда Фибоначчи равен трем: 1 1 2 3.

Источник

Числа Фибоначчи на Python

Статьи

Введение

В статье разберём 3 способа получения ряда Фибоначчи на Python. Первые два способа будут с использованием циклов, а третий – рекурсивный.

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

Числа Фибоначчи циклом while

Для начала создадим переменную, в которую будет вводиться длина ряда:

n = int(input('Введите длину ряда: '))

Далее создадим две переменные (f1 и f2), которые будут равняться начальным единицам и выведем их:

Создадим переменную i, которая будет равняться двум:

Добавим цикл, который не закончится, пока переменная i будет меньше переменной n:

Числа Фибоначчи на Python:

n = int(input('Введите длину ряда: ')) f1 = f2 = 1 print(f1, f2, end=' ') i = 2 while i < n: f1, f2 = f2, f1 + f2 # f1 приравнивается к f2, f2 приравнивается к f1 + f2 print(f2, end=' ') # Выводится f2 i += 1 print()

Числа Фибоначчи циклом for

Создадим переменную, в которую будет вводиться длина ряда:

n = int(input('Введите длину ряда: '))

Далее создадим две переменные (f1 и f2), которые будут равняться начальным единицам и выведем их:

Добавим цикл, который начинается с 2, и заканчивается на n:

for i in range(2, n): f1, f2 = f2, f1 + f2 # f1 приравнивается к f2, f2 приравнивается к f1 + f2 print(f2, end=' ') # Выводится f2

Числа Фибоначчи на Python:

n = int(input('Введите длину ряда: ')) f1 = f2 = 1 print(f1, f2, end=' ') for i in range(2, n): f1, f2 = f2, f1 + f2 print(f2, end=' ')

Числа Фибоначчи рекурсией

Для начала создадим рекурсивную функцию, назовём её fibonacci и добавим ей параметр n:

Добавим условие, что если n = 1, или n = 2, то возвращается единица, так как первый и второй элементы ряда Фибоначчи равны единице. Если же условие не срабатывает, то элементы складываются:

def fibonacci(n): if n == 1 or n == 2: # Если n = 1, или n = 2, вернуть в вызывающую ветку единицу, так как первый и второй элементы ряда Фибоначчи равны единице. return 1 return fibonacci(n - 1) + fibonacci(n - 2)

Числа Фибоначчи на Python:

def fibonacci(n): if n == 1 or n == 2: return 1 return fibonacci(n - 1) + fibonacci(n - 2) n = int(input()) print(fibonacci(n))

Заключение

В данной статье мы научились вычислять n-ное число ряда Фибоначчи на Python. Надеюсь Вам понравилась статья, удачи! 🙂

Источник

Оцените статью