2015-12-17 5 views
0
def russian (a,b): 
    x=a 
    y=b 
    z=0 
    while x>0: 
     if x % 2 == 1: z=z+y 
     y= y *2 
     x= x/2 
     return z 
print russian(24,16) 

Эта функция использует русский крестьянский алгоритм для умножения двух чисел вместе. Я ожидаю увидеть 384 в качестве вывода, но вместо этого получаю 0. Что я делаю не так? Я использую Python 2.7.Почему мой вывод 0?

+2

Это заявление о возвращении в правильном месте? Рассмотрим внимательно глядя на ваш отступ –

+4

** Отступ важно Важно ** –

+0

Спасибо! Глупая ошибка. – user2200497

ответ

1

Вы вычисляете значение z только один раз и сразу же возвращаете его внутри цикла while. Потерять один уровень отступа для return z.

1

Проблема заключается в том, что ваш return z находится внутри Оператор While делая конец функции и возвращать 0 на первой итерации и z никогда не меняется, потому что 24 % 2 = 0 не 1.

+0

Большое вам спасибо. Глупая ошибка в моем искусстве (явно новая для этого). – user2200497

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