Рекурсия для печати суммы первых десяти чисел, используя один, как если бы в Python - PullRequest
0 голосов
/ 26 июня 2018
def ad(a): 
    return a+ad(a+1) if a<10 else return a
ad(1)

Возвращает ошибку, сообщающую неверный синтаксис есть мысли?

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

def ad(a): return a+ad(a+1) if a<10 else a ad(1)

Ваш код не работает, потому что вы написали инструкцию return в инструкции return.
Объяснение моего кода довольно просто:
когда a достигает 10, возвращается 10, иначе сумма его номера и объявления (следующего числа).

a(10) = 10  
a(9) = 9 + a(10) = 9 + 10 = 19  
a(8) = 8 + a(9) = 8 + 19 = 27  

...

a(1) = 1 + a(2) = 1 + 54 = 55
0 голосов
/ 27 июня 2018

Вы спросили, есть ли у нас какие-либо мысли.Я думаю, что нет смысла писать функцию, которая работает только в одном случае обобщенной проблемы.Если вы рассчитываете только для 10, вы можете просто предварительно рассчитать ответ и связать его, чтобы получить 55.

Я бы предложил более общую реализацию, которая вычисляет сумму из переданного аргумента внизк нулю или просто возвращает аргумент, если он отрицательный:

def sum_to(x):
    return x + sum_to(x-1) if x > 1 else x

print(sum_to(0))    # => 0
print(sum_to(10))   # => 55
print(sum_to(20))   # => 210
print(sum_to(-10))  # => -10

(хотя в действительности я бы использовал формулу прямого вычисления x * (x + 1) / 2 вместо рекурсии).

0 голосов
/ 26 июня 2018

У вас есть некоторые опечатки.

def ad(a):
    return a+ad(a+1) if a<10 else ad(1)

но здесь тоже есть логические ошибки.

Обновление: вероятно, вы ожидаете это:

def ad(a):
    return a + ad(a + 1) if a < 10 else 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...