Дыбр и программистское
Feb. 20th, 2015 03:29 pmВ первой половине дня мироздание как будто специально не давало мне сделать очередной задание по курсу. Постоянно шли звонки, то по городскому телефону, то по мобильному. Но задание я всё-таки сделала, пусть не так, как сделал его преподаватель. Что-то рекурсия мне тяжело даётся...
Света
svet_k, к тебе вопрос.
Условие задачи: разработать функцию super_fibonacci(n, m), которая принимает два аргумента: положительные целые числа n и m (0 < n, m <= 35), и возвращает число: n-й елемент последовательности супер-Фибоначчи порядка m.
Последовательность Фибоначчи - Это последовательность чисел, в которой каждый элемент равен сумме двух предыдущих. Последовательность супер-Фибоначчи порядка m - это последовательность, в которой каждый элемент равен сумме m предыдущих. Первые m элементов (с порядковыми номерами от 1 до m) будем считать единицами.
Решение преподавателя:
def super_fibonacci(n, m):
if n<=m:
return 1
else:
sum = 0
for i in range(1, m+1):
previous = super_fibonacci(n-i, m)
sum = sum + previous
return sum
Например, я вызываю функцию с такими параметрами:
super_fibonacci(9, 3)
Я не могу понять, как работает эта рекурсия, чему будет равно previos при первом проходе цикла?
И о шоппинге. Неожиданно купили Лёше ботинки осенне-весенние. За 735 грн., 42 размер., кожаные. Скидка с 2200 грн., неплохо так?
Света
Условие задачи: разработать функцию super_fibonacci(n, m), которая принимает два аргумента: положительные целые числа n и m (0 < n, m <= 35), и возвращает число: n-й елемент последовательности супер-Фибоначчи порядка m.
Последовательность Фибоначчи - Это последовательность чисел, в которой каждый элемент равен сумме двух предыдущих. Последовательность супер-Фибоначчи порядка m - это последовательность, в которой каждый элемент равен сумме m предыдущих. Первые m элементов (с порядковыми номерами от 1 до m) будем считать единицами.
Решение преподавателя:
def super_fibonacci(n, m):
if n<=m:
return 1
else:
sum = 0
for i in range(1, m+1):
previous = super_fibonacci(n-i, m)
sum = sum + previous
return sum
Например, я вызываю функцию с такими параметрами:
super_fibonacci(9, 3)
Я не могу понять, как работает эта рекурсия, чему будет равно previos при первом проходе цикла?
И о шоппинге. Неожиданно купили Лёше ботинки осенне-весенние. За 735 грн., 42 размер., кожаные. Скидка с 2200 грн., неплохо так?
no subject
Date: 2015-02-20 01:51 pm (UTC)Может и другим студентам было не понятно, а все промолчали ((
no subject
Date: 2015-02-20 01:56 pm (UTC)no subject
Date: 2015-02-20 03:34 pm (UTC)как хорошо, что мне не надо на работе такие рассчёты писать :).
сразу скажу, что рекурсию вообще никогда не использую - мне кажется, что это такая палка о двух концах...
ну ладно.
а у тебя Питон есть на компе дома? жалко, что я на работе в ЖЖ не хожу, я бы тебе вывела программно последовательность, было бы проще и наглядней.
а так вот давай тогда вместе мозг ломать, что ли :). только ты напрасно начала с этой вводной :(9,3). 3(м) - это типа глубина, т.е. количество суммируемых чисел, так ведь? в обычной последовательности Фибоначчи вроде 2 числа предыдущих суммируют, а у вас супер-Фибоначчи, поэтому 3 числа надо сложить каждый раз. мне кажется, что проще вообще начинать с (1,3) и дальше последовательно всё считать. тогда наглядно будет видно, как программа работает. а ты сразу хочешь элемент из последовательности увидеть(9).
miloro
Date: 2015-02-20 05:50 pm (UTC)no subject
Date: 2015-02-23 02:17 pm (UTC)no subject
Date: 2015-02-23 02:45 pm (UTC)на самом деле, беды вообще никакой не вижу - это пример довольно нежизненный :).
если хочешь, я на работе пороюсь, у меня должны быть ссылки на интересные ресурсы по Питону. я тебе ссылки пришлю.
no subject
Date: 2015-02-23 02:46 pm (UTC)Бросай, буду благодарна.