パラメータとして符号なし整数を受け取り、この数値の桁数を返す 2 つの関数を考えてみましょう。1 つの関数は再帰的で、もう 1 つは非再帰的です。
複雑さに関しては、どの実装が優れていますか?
使用言語は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) 非再帰。