2013-11-16 3 views
0

Итак, вопрос гласит: спроектируйте функцию, которая принимает целочисленный аргумент и возвращает сумму всех целых чисел от 1 до числа, переданного в качестве аргумента. Например, если 50 передано в качестве аргумента, функция вернет сумму 1,2,3,4 ...... .50. Используйте рекурсию для вычисления суммы. им иметь много проблем, как вы можете сказать по моему кодурекурсивная функция в добавлении питона?

def main(): 
    numbers= int(input('Enter a number to add the sums: ') 
    mysum = sum_num(numbers,1) 


def sum_num(numbers,mysum): 
    start=1 
    end=numbers 
    if start>end: 
     return 0 
    else: 
     return my_sum 
main() 
+1

Что _exactly_ это проблема? «У меня много проблем ...» слишком расплывчато для SO. – iCodez

+0

Я не могу заставить код работать. также я не знаю, правильно ли им это делать. – nixvaldez

+0

Для того, чтобы быть рекурсивным, он должен ... Знать. Вызывайте себя рекурсивно. Мог бы начать там. – roippi

ответ

1
def sumup(n): 
    # this one is your emergency break. you return 1 if n gets below 
    # a certain threshold, otherwise you'll end up with an infinite 
    # loop 
    if n <= 1: 
     return n 
    # here is the recursion step, we return (n + "the sum to n+1") 
    else: 
     return n + sumup(n-1) 

print(sumup(50)) 
+0

Как я могу сделать так, чтобы пользователь мог ввести целое число? im, угадывая добавление ввода в оператор печати? – nixvaldez

+0

Я только набросал рекурсию, которую вы хотели. Операция 'print' является лишь примером. Вы должны прочитать некоторые основные руководства по python (http://docs.python.org/2/tutorial/), это не подходящее место для обсуждения общего программирования. – tamasgal

+0

BTW, бесполезное выражение 'else' ... –

-1

Игра в гольф немного:

def sumup(n): 
    return (n + sumup(n - 1) if n > 1 else n) if isinstance(n, int) else None 
+0

Вы сделали это дольше и сложнее. Также игра в гольф не означает придерживаться конкретной реализации: 'def f (n): return n * (n + 1)/2' – tamasgal

+0

@septi OP ** требуется ** рекурсия. Я просто упростил функции pythonic. Мой ответ даже является ошибкой. Похоже, вы просто пытаетесь убедить OP поддержать и принять свой ответ независимо от того, насколько вы неправы. Допустим правильный ответ ... где ваша честная игра? StackOverflow не собирается собирать rep. Это просто дает хорошие ответы. –

+0

1. Вы не упростили. 2. OP не просил гольф кодов (не говоря уже о том, что вы не «играли в гольф». Посмотрите определение игры в гольф.) 3. Вы не следовали за дзеном python. 4. Нет необходимости проверять 'int', так как ввод вводится в' int' во время 'int (input())' (а также проверка типов вообще не является пифонической). 5. Вам не нужно возвращать 'None', так как не возвращает ничего равным возврату' None'. 6. Возможно, это начало игры в гольф: 'def f (n): return n + f (n - 1), если n> 1 else 1' 7. Я не имею права голоса на любые действительные ответы. – tamasgal

Смежные вопросы