Тема: Рекурсія: знайти найбільший член серед додатних членів послідовності
Знайти найбільший член серед додатних членів послідовності через рекурсію
Допоможіть будь-ласка
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Python → Рекурсія: знайти найбільший член серед додатних членів послідовності
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Знайти найбільший член серед додатних членів послідовності через рекурсію
Допоможіть будь-ласка
Знайти найбільший член серед додатних членів послідовності через рекурсію
Допоможіть будь-ласка
В чому саме проблема?
alinabelayaa написав:Знайти найбільший член серед додатних членів послідовності через рекурсію
Допоможіть будь-ласкаВ чому саме проблема?
def Max(n):
w = Max(n-1)
if n == 1:
Max = a[0]
else:
if a[n-1] < w:
return w
else:
return a[n-1]
n = int(input('n='))
a = []
for i in range(0, n):
x = int(input('a[{}]='.format(i+1)))
a.append(x)
print(a)
print('max =', Max(n))
Вибиває помилку "local variable 'Max' referenced before assignment"
Спробувала прибрати функцію у return, але тоді вже не знаю що зробити з другим if
alinabelayaa написав:Знайти найбільший член серед додатних членів послідовності через рекурсію
Допоможіть будь-ласкаВ чому саме проблема?
зробити рекурсію коротше і швидше за це
A = [-1,2,3]
A = [i for i in A if i > 0]
print(sum (A))
HetmanNet написав:alinabelayaa написав:Знайти найбільший член серед додатних членів послідовності через рекурсію
Допоможіть будь-ласкаВ чому саме проблема?
зробити рекурсію коротше і швидше за це
A = [-1,2,3] A = [i for i in A if i > 0] print(sum (A))
Це не рекурсія
Ви неправильно розумієте рекурсію.
Вам потрібна така функція Max, яка з масиву робить його суму (принаймні, його частини), визначену через саму цю функцію.
Приблизно так:
Max:
- якщо масив пустий, повернути 0
- якщо перший елемент додатний, повернути його + Max(решти елементів)
- інакше повернути Max(решти елементів) #нам не потрібно нічого додавати
Масив, що складається з усіх елементів масиву a, крім початкового - це в Puthon a[1:]. Зможете це закодувати?
Ви неправильно розумієте рекурсію.
Вам потрібна така функція Max, яка з масиву робить його суму (принаймні, його частини), визначену через саму цю функцію.
Приблизно так:Max: - якщо масив пустий, повернути 0 - якщо перший елемент додатний, повернути його + Max(решти елементів) - інакше повернути Max(решти елементів) #нам не потрібно нічого додавати
Масив, що складається з усіх елементів масиву a, крім початкового - це в Puthon a[1:]. Зможете це закодувати?
Зараз спробую
ur_naz написав:HetmanNet написав:В чому саме проблема?
зробити рекурсію коротше і швидше за це
A = [-1,2,3] A = [i for i in A if i > 0] print(sum (A))
Це не рекурсія
ну так зроби коротше і ефективніше з рекурсієй
Ви неправильно розумієте рекурсію.
Вам потрібна така функція Max, яка з масиву робить його суму (принаймні, його частини), визначену через саму цю функцію.
Приблизно так:Max: - якщо масив пустий, повернути 0 - якщо перший елемент додатний, повернути його + Max(решти елементів) - інакше повернути Max(решти елементів) #нам не потрібно нічого додавати
Масив, що складається з усіх елементів масиву a, крім початкового - це в Puthon a[1:]. Зможете це закодувати?
У мене виходить, що вона просто шукає сумму всіх додатніх елементів
А я не розумію як тоді можна знайти найбільший?
Так, вибачте, неуважно прочитав умову (а слово Max мало б насторожити). Там не сума, там максимум у другій гілці. А якщо поверне 0 - значить, не було додатних чисел.
-- якщо перший елемент додатний, повернути його + Max(решти елементів)
+- якщо перший елемент додатний, повернути з нього і Max(решти елементів) більший
Цікавий факт: найбільший елемент масиву є одночасно найбільшим серед додатних його членів, якщо вони там є
тому це завдання є хибним. воно має бути таким: знайти найменше з позитивних
щоб якщо,
A = [-1,2,3]
то рішення було не
max(A)
a хоча б
min([i for i in A if i > 0])
або
тому це завдання є хибним. воно має бути таким: знайти найменше з позитивних
Звідки ви це взяли? Якщо завдання виявляється простішим, ніж воно сформульоване, то це не означає, що воно є хибним. Наприклад, якщо ми шукаємо найкраще місце для бази на Марсі, де була б можлива вода в рідкому стані, то це завдання цілком виправдане.
"Звідки ви це взяли?"
тому що воно призводить до помилок, бо не призводить до помилок, бо 0 таке ж саме число як і 1 і 2 та інші
і ще 1 зайва ітерація хто зна до чого призведе
"Звідки ви це взяли?"
тому що воно призводить до помилок, бо не призводить до помилок, бо 0 таке ж саме число як і 1 і 2 та інші
і ще 1 зайва ітерація хто зна до чого призведе
Якщо я правильно зрозумів цей потік свідомості, то ви відповідали не на питання, чому ви вважаєте, що в умові помилка, а коментували повернення 0 як ознаки відсутності чисел. Будь ласка, дайте відповідь на моє питання.
Що ж до нуля - то функція у нас рекурсивна, і падати через те, що хвіст не містить потрібних чисел, не має. Втім, повертати некоректне значення - цілком поширена практика, наприклад, для пошуку в рядку є дві функції: str.index, яка кидає ValueError за відсутності потрібного значення, та str.find, що повертає -1, що є коректним індексом в Python. Тобто s[s.find('a')] може дорівнювати зовсім не 'a'. Просто це треба враховувати при використанні функцій. В умові не сказано, що робити за відсутності додатних чисел у списку; повернення 0 - далеко не гірший варіант.
і ще 1 зайва ітерація хто зна до чого призведе
Якщо є сумніви, що глибини рекурсії вистачить, то не треба застосовувати рекурсію. Завжди може статися так, що вашу функцію викличуть з іншої, що додасть той самий зайвий рівень глибини.
воно хибне навіть не тому, що помилкове, бо відповідь буде завжди містити помилку. а тому що не має жодного сенсу, бо вирішується за допомогою одної функції max, яка ще й генерує помилку для [].
якщо ви не розумієте чому функція, яка не падає, містить помилку, то що вам сказати? бажаю вам розділити ваш потік свідомості на результат такої функції...
доречі, до чого тут рядки? потік?ваша функція не генерує -1. вона генерує будь яке число. це все одне, якби вона генерувала інтегер або стрінг, навіть гірше, бо в такому випадку рано, чи пізно, помилка вискочить
а тут ні. хіба ви вважаєте що str.find повертає інтегер? це не так. вона повертає варіант... як і тут.
"Завжди може статися так, що вашу функцію викличуть з іншої, що додасть той самий зайвий рівень глибини." сказали А кажіть і Б
і на останок... щоб не робити з студентів дебілів. треба думати, коли складаєш завдання. вони повинні бути
1) цікавими
2) корисними
3) мати єдиний і доцільний розв'язок
а тут нічого з того немає
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися