Просто для академических целей, мы посмотрим на использовании рекурсии в сочетании сconv
может. Это вдохновляет подход Луиса Мендо и Амита.
Другими словами:
function [final] = convertNum(x)
function [out] = helper(in)
if numel(in) == 2
out = in;
else
out = helper(conv(in, [1 1], 'valid'));
end
end
digits = dec2base(x, 10) - '0';
final_digits = helper(digits);
final = str2num(sprintf('%i',final_digits));
end
convertNum
это функция, которую мы будем использовать, чтобы взять в ряд, и выход будет два элемента вектора, который производит сумму парных элементов на каждом шаге до тех пор, остались два элемента.
Нам нужна вспомогательная функция, которая будет принимать массив коэффициентов, в котором этот массив состоит из извлеченных отдельных цифр входного номера в convertNum
, который хранится в x
.Сначала мы делаем наш номер x
и преобразуем цифры в отдельные номера (взяты из проспекта Луиса Мендо и Амита). Затем мы вызываем вспомогательную функцию для вычисления нашей парной суммы.
Вспомогательная функция работает таким образом, где, если мы имеем входное число, длина которого не равно 2, мы выполняем парную сумму с помощью conv
и использовать эту функцию, чтобы рекурсия в нашу вспомогательной функцию. Когда вход состоит только из двух элементов, это то, что мы возвращаем из вспомогательной функции, мы берем эти два вектора и объединяем их в одно число. Это то, что мы наконец возвращаем к пользователю.
Таким образом, работа с x = 21020
, мы получаем:
final = convertNum(21020)
final =
77
Аналогично:
final = convertNum(4237)
final =
1115
Что вы trined? – Marcin
Я попробовал sums = x (1: end-1) + x (2: end), но это только начальная сумма. Мне нужно заставить его работать до двух оставшихся номеров. – timrow