- Print Fibonacci Series using lambda and map or reduce in python
- 6 Answers 6
- Code Snippet:
- output
- Числа Фибоначчи: циклом и рекурсией
- Вычисление n-го числа ряда Фибоначчи с помощью цикла while
- Вывод ряда чисел Фибоначчи с помощью цикла for
- Рекурсивное вычисление n-го числа ряда Фибоначчи
- Числа Фибоначчи на Python
- Введение
- Числа Фибоначчи циклом while
- Числа Фибоначчи циклом for
- Числа Фибоначчи рекурсией
- Заключение
Print Fibonacci Series using lambda and map or reduce in python
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.
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 .
- Сложить fib1 и fib2 , присвоив результат переменной для временного хранения данных, например, fib_sum .
- Переменной fib1 присвоить значение fib2 .
- Переменной 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-го числа ряда Фибоначчи
- Если n = 1 или n = 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. Надеюсь Вам понравилась статья, удачи! 🙂