Рассмотрим две функции, которые принимают в качестве параметра целое число без знака и возвращают количество цифр этого числа. Одна функция рекурсивна, а другая нерекурсивна.Сложность времени и пространства рекурсивного и нерекурсивного малого алгоритма
С точки зрения сложности, какая реализация лучше?
Используемый язык - C/C++.
Здесь не-рекурсивная функция:
int nbOfDigitsNR(int nb) {
int i=0
while(nb!=0){
nb=nb/10;
++i;
}
return i; // i is the number of digits
}
рекурсивная функция:
int nbOfDigitsNR(int nb) {
static int i;
if (nb!=0){
i=i+1;
nbOfDigitsNR(nb/10);}
return i;
}
Я полагаю, что временная сложность такой же: О (п), и сложность пространства другое: O (n) рекурсивное. O (1) нерекурсивный.
Вы можете использовать алгоритм O (1) для числа цифр: 'numDigits (x) {return floor (log_10 (x) +1)}' – halex
Я думаю, что для временной сложности оба являются O (n), где n это число итераций !!!!! – ZEMA
Покажите нам свои реализации вместе с вашими предположениями и аргументами, которые укрепляют их для их сложности, тогда мы можем обсудить их. Мы не будем делать домашнее задание без вашего умственного участия. – halex