Написание рекурсивной функции, которая суммирует количество значений с нечетным двоичным числом единиц в псевдокоде - PullRequest
0 голосов
/ 26 мая 2020

У меня есть домашний вопрос, который гласит:

Напишите рекурсивную функцию sum_odd (n), используя принципы псевдокода, описанные в лекции, чтобы суммировать числа i между 1 и n, где двоичное представление i содержит нечетное количество единиц, например, 14 представлено как 0b1110, которое содержит нечетное количество единиц. Вы можете предположить, что у вас есть доступ к функции binary_ones (d), которая возвращает количество единиц в двоичном представлении d. Вы не должны записывать эту функцию, но можете вызывать ее в своем псевдокоде. Вы также можете предположить, что n будет больше 0 - проверка ошибок не требуется.

Пока что я придумал следующее:

function sum_odd(n):
    read n 
    sum = 0 
    if n is less than or equals to 0 then
         return sum
    else if binary_ones(n) % 2 equals 1 then
         return sum = sum + sum_odd(n-1)
    else
         return sum_odd(n-1)
    end if 

Меня беспокоит сумма = сумма + сумма_odd (n-1) часть. Я не думаю, что он добавит первое введенное значение, что заставляет меня сомневаться, что я вообще все сделал правильно.

Может понадобиться помощь.

1 Ответ

1 голос
/ 27 мая 2020

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

Итак, вот, что я думаю, это некоторые fl aws в вашем псевдокоде -

  1. Вам не нужно read n, он передается в качестве аргумента, поэтому read n должен выполняться основной функцией, которая вызывает sum_odd(n).
  2. Ваша проблема верно, это не должно быть return sum = sum + sum_odd(n-1), должно быть return n + sum_odd(n-1). Вы не сделали часть суммирования чисел , вы не добавили число, которое удовлетворяет условию.
  3. Вам не нужна переменная sum = 0, вы можете просто return 0 для состояния n <= 0.
...