我正在阅读递归函数,我一直试图找出这个函数的数学公式。我想也许这是一个对数函数,但这似乎不是它。如果有人能指出我正确的方向,我将不胜感激。
unsigned f(unsigned n){
if(n<2)
return 1;
return 1 + f(n/2);
}
答案 0 :(得分:4)
它是一个对数函数,仅对于基数2.更具体地说,它是 ceil
1 + floor(log2(n))
。
答案 1 :(得分:1)
由于您担心该函数所基于的数学公式:
这是:f
是n
:
f(n) = 1 + f(n/2) if n >=2
f(n) = 1 if n <=1 //n is unsigned so n >=0
考虑到上述公式,基础算法具有对数复杂度。原因是,在每一步,它都会将n
的大小减半,并且log(n)
(基数2)步骤达到1,因此,{{1}是对数复杂度}。
答案 2 :(得分:1)
我知道你说的是“数学函数”,它为现有答案设定了视角,但为了显示另一个视角,它会返回:
n
所需的位数(如果您认为有意义地编码数字0所需的1位,则根本不存在任何数字)n|1
中设置的最高有效位的基于1的索引,又名n
中设置的最高有效位的从1开始的索引)有时候,当你查看代码时,可以看到一个函数可以用于不同的意图 - 任何一个透视图都可以让你更容易理解使用的上下文。
答案 3 :(得分:0)
此函数通过将整数除以2直到达到零来返回函数执行的次数
EX:
f(8)-
return f(4) //continue on
return f(2) //continue on
return f(1) //we know this is 1
return f(2) //now we can do this one, 2
return f(4) //and this one, 3
答案 4 :(得分:0)
更确切地说,这实现了floor(logbase2(n))