2017-01-24 6 views
-1

Мне пришлось проверять время выполнения этой функции. Я знаю, что ответ j-i, но я не понимаю, почему.анализ времени выполнения - рекурсивный пример functiokn

предположим J> = я

def my_sum(i,j): 
    if i == j: 
     return i 
    mid = (i + j)//2 
    return my_sum(i, mid) + my_sum(mid + 1, j) 

делает кого-то есть какие-либо идеи, почему?

+0

Больше всего ответ: * не * j-i. Пожалуйста, покажите работу, которую вы сделали, чтобы проанализировать код; «Я не понимаю, почему» не является большой проблемой. Похоже, что вы не запускали код, не отслеживали операцию или не моделировали ее вручную. Пожалуйста, сделайте это и опишите свои выводы и оставшуюся путаницу. – Prune

+0

это вопрос из теста. после теста они опубликовали, что это ответ. –

ответ

0

редактировать:

мой плохой, не осуществил бы вы использовали "//"

, что, как представляется, проблема возврата

вы используете:

return my_sum(i, mid) + my_sum(mid + 1, j) 

давайте рассмотрим пример, i = 2, j = 4:

Что происходит:

if i == j: ## false nothing happens here 
    return i 
mid = (i + j)//2 ## mid = (2+4)//2 = 3 
return my_sum(i, mid) + my_sum(mid + 1, j) ## return my_sum(2,3) + my_sum(4,4) 

my_sum (2,3): 
.... 
mid = (2+3)//2 = 2 
return my_sum (2,2) + my_sum(3,3) = 2 + 3 = 5 

my_sum(4,4) = 4 

так:

my_sum (2,3) + my_sum(4,4) = 5 + 4 = 9 

который problaby не то, что вы хотели.

так что проблема здесь заключается в том, чтобы problaby установил возвращаемое значение