С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
3 / 3 / 0
Регистрация: 10.04.2015
Сообщений: 230

Связь между return и рекурсией

06.03.2024, 16:31. Показов 1175. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, друзья! Подскажите, пожалуйста, почему, если в программе вместо return 0 поставить return 1, то программа при этом выводит разное конечное значение функции f(1, 0). Как это работает. Как и почему изменяются вычисления при ретурн 0 ретурн 1?
Python
1
2
3
4
5
6
7
8
def f(x, p):
    if 1000 <= x <= 1024 and p == 8:
        print("x =", x)
    if x >= 1024 or p > 8:
        return 0
    return f(x + 1, p + 1) + f(x + 5, p + 1) + f(x * 3, p + 1)
 
print(f(1, 0))
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.03.2024, 16:31
Ответы с готовыми решениями:

В чем разница между return и return false/true
Привет всем. Вот подскажите плиз) return; return false; return true; расскажите пожалуйста об етих операторах.. чем они...

Разница между return; и return 0;
Какая разница между return; и return 0;

Создать любые две таблицы, установить между ними связь, и с помощью запроса показать эту связь
Короче такое задание. Создать любые две таблицы, установить между ними связь и с помощью запроса показать эту связь. Как это сделать?...

24
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
07.03.2024, 09:33
Цитата Сообщение от eugeny1984 Посмотреть сообщение
почему, если в программе вместо return 0 поставить return 1, то программа при этом выводит разное конечное значение функции f(1, 0)
- странный вопрос... Вот функция

Python
1
2
3
def foo(x,y):
     # бла-бла-бла
     return 1
Она будет возвращать значение 1. А если вместо "return 1" написать "return 2", то функция будет возвращать 2. Тебя это не удивляет?
0
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,305
07.03.2024, 10:20
Цитата Сообщение от Catstail Посмотреть сообщение
return 1
2, 3 ....
зачем такое вообще нужно? смысл функции когда ей указано вернуть число, а не то, что она посчитала?? то есть переменную не понятен
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
07.03.2024, 10:21
Ципихович Эндрю, твой камент наглядно показывает, что ты вообще не понимаешь что такое рекурсия
1
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,305
07.03.2024, 10:29
Цитата Сообщение от iSmokeJC Посмотреть сообщение
вообще не понимаешь что такое рекурсия
понимаю, но я отвечал на пост № 2 не более того
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
07.03.2024, 10:33
Функция может выполнить туеву хучу работы и вернуть например статус выполнения/состояния чего-либо
1
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,305
07.03.2024, 10:36
iSmokeJC,
Цитата Сообщение от Catstail Посмотреть сообщение
def foo(x,y):
     # бла-бла-бла
     return 1
вместо бла-бла-бла
можно пример чего-то годного?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
07.03.2024, 10:41


Добавлено через 3 минуты
Code
1
2
3
4
5
6
def foo(x, y):
   try:
      saveToDataBase(x+y)
      return 0    # success
   except DBError:
      return 1    # error
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
07.03.2024, 11:10
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
смысл функции когда ей указано вернуть число, а не то, что она посчитала?? то есть переменную не понятен
- а мне непонятно, на каком языке это написано.

Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
вместо бла-бла-бла можно пример чего-то годного?
- пример рассчитан на тех, кто понимает, что такое функция.

Вот пример без бла-бла-бла

Python
1
2
3
4
5
def fib(n):
    if n<=2:
        return 1
    else:
        return fib(n-1)+fib(n-2)
Если вместо "return 1" поставить "return 2", то вместо последовательности 1,1,2,3,5,8,13,21... функция будет возвращать другую последовательность 2,2,4,6,10,16,26,... ТС это сильно удивляет.
2
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,305
07.03.2024, 11:13
Цитата Сообщение от Catstail Посмотреть сообщение
if n<=2:
        return 1
ну да насочинять можно, в этом случае - if n<=2 я бы не посылал делать def fib(n)
ну пусть ТС набивает шишки
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
07.03.2024, 11:16
Catstail, всё ясно?
2
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
07.03.2024, 13:51
eugeny1984, а почему оно должна выводить то же самое?
0
3 / 3 / 0
Регистрация: 10.04.2015
Сообщений: 230
07.03.2024, 17:29  [ТС]
Catstail, я не могу понять куда в return 0 возвращается эта ложь? эта ложь в виде нуля сюда что ли подставляется return f(x + 1, p + 1) + f(x + 5, p + 1) + f(x * 3, p + 1) или просто функция заканчивает работу?

Добавлено через 20 секунд
iSmokeJC, return f(x + 1, p + 1) + f(x + 5, p + 1) + f(x * 3, p + 1)
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
07.03.2024, 17:39
Цитата Сообщение от eugeny1984 Посмотреть сообщение
эта ложь в виде нуля сюда что ли подставляется return f
Вполне возможно. Вы же вызываете f? Она может вернуть этот ноль? В чём вопрос-то?
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
07.03.2024, 19:11
Цитата Сообщение от eugeny1984 Посмотреть сообщение
я не могу понять куда в return 0 возвращается эта ложь? эта ложь в виде нуля сюда что ли подставляется return f(x + 1, p + 1) + f(x + 5, p + 1) + f(x * 3, p + 1) или просто функция заканчивает работу?
Ну, данный вызов завершает работу, разумеется, если мы именно в этой ветке находимся согласно значениям входных данных.
Цитата Сообщение от eugeny1984 Посмотреть сообщение
f(x + 1, p + 1) + f(x + 5, p + 1) + f(x * 3, p + 1)
А это выражение как раз и суммирует возвращаемые значения вызываемых в нем функций.
0
0 / 0 / 0
Регистрация: 25.04.2021
Сообщений: 11
08.03.2024, 06:11
Добрый день
Я понимаю это так: return 1 или return 0 возвращает 1 или 0 туда, откуда функция f была запущена, то есть
в формулу f(x + 1, p + 1) + f(x + 5, p + 1) + f(x * 3, p + 1).
Чудеса рекурсии, выйдя из функции f я оказываюсь снова в функции f, но на другом ярусе.
А в данной формуле только суммы этих же функций.
То есть, в общем результате мы увидим сумму вхождений в блок if x >= 1024 or p > 8
Если поставить туда счетчик и установить return 1, то это хорошо видно

Code
1
2
3
4
5
6
7
8
9
10
11
12
chetchik = [0]
 
def f(x, p):
    if 1000 <= x <= 1024 and p == 8:
        print("x =", x)
    if x >= 1024 or p > 8:
        chetchik[0] += 1
        print(chetchik[0])
        return 1
    return f(x + 1, p + 1) + f(x + 5, p + 1) + f(x * 3, p + 1)
 
print(f(1, 0))
Всех девчонок с праздником!!!
0
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,305
08.03.2024, 06:31
если return с числом, например return 1 и без if как в сообщении 2
то, чтобы вы не подставили вместо # бла-бла-бла - не имеет значения, всё равно вернёт 1
может для понятия ставьте не 0 и 1 а ложь=фолс или истину=тру
0
 Аватар для ANT0NY
104 / 50 / 9
Регистрация: 06.01.2024
Сообщений: 383
08.03.2024, 13:44
Как правило, return
1) возвращает одно или несколько указанных значений и
2) выходит из функции.

А для рекурсии - вызова функции самой себя - нужен 1) как результат, 2) так и выход по условию.

Например, сумма чисел от 1 до положительного N включительно, в прямом решении без рекурсии
Python
1
2
3
4
5
def No_recursion(N):
    count = 0
    for i in range(1, N+1):
        count += 1
    return count
а с рекурсией
Python
1
2
3
4
def With_recursion(N):
    if N == 0:
        return 0
    return N + With_recursion(N-1)
Если иногда смущает несколько return в одной функции, это допустимо (присваивание+выход).

Как немного разберётесь, можно комбинировать результаты, использовать pass (return None) и yield.
0
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,305
08.03.2024, 14:07
Цитата Сообщение от ANT0NY Посмотреть сообщение
Если иногда смущает несколько return в одной функции
то они как правило привязаны к разным условиям=ифам=if
0
 Аватар для ANT0NY
104 / 50 / 9
Регистрация: 06.01.2024
Сообщений: 383
08.03.2024, 18:41
Эндрю, судя по вопросам, ТС не совсем понимает смысл рекурсии, что выход может быть как конечным результатом, так и промежуточным - на предыдущий уровень стека. Или же сбивают с толка несколько рекурсий.

eugeny1984, любой рекурсивный алгоритм можно переписать без рекурсии, но часто за счёт усложнения кода. Посмотрите на черновой вариант вашей функции без рекурсии (через итерации):
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def f2(x, p):
    stack = [(x, p)]
    result = 0
    while stack:
        x, p = stack.pop()
        if 1000 <= x <= 1024 and p == 8:
            print("x =", x)
        if x >= 1024 or p > 8:return 0
        else:
            stack.append((x + 1, p + 1))
            stack.append((x + 5, p + 1))
            stack.append((x * 3, p + 1))
    return result
Вставив пару print с дебагом на входе и выходе, можно просмотреть все значения по шагам.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.03.2024, 18:41
Помогаю со студенческими работами здесь

В чем разница между Рекурсией и Итерацией?
Рекурсия позволяет сэкономить время но требует больше памяти, а циклы длятся дольше рекурсии но при этом занимают меньше памяти? Я...

Пояснить разницу между рекурсией и итерацией на примере
Всем привет, можете объяснить разницу между рекурсией и итерацией. С помощью примера пожалуйста.

Найти связь между током в кабеле I(x) и разностью потенциалов phi(x) между жилой кабеля и землей
Подземный кабель имеет постоянное сопротивление r на единицу длины. Изоляция кабеля несовершенна и через нее происходит утечка....

Объясните, пожалуйста, чайнику разницу между рекурсией, корекурсией и итерацией
Уважаемые знатоки, Объясните, пожалуйста, несведущему разницу между рекурсией, корекурсией и итерацией. Если я обратился с вопросом не...

Разница между return и yield
Здравствуйте. В интернете нашёл не так много ответов, поэтому обращаюсь сюда. В чём разница и конкретно в каких случаях подходят return и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru