考虑两个函数,它们接受一个无符号整数作为参数并返回该数字的位数。一个函数是递归的,另一个是非递归的。
就复杂性而言,哪个实现更好?
使用的语言是 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(n)递归。O(1) 非递归。