不确定这个递归函数返回什么

时间:2013-05-10 01:52:11

标签: c++ recursion

我正在阅读递归函数,我一直试图找出这个函数的数学公式。我想也许这是一个对数函数,但这似乎不是它。如果有人能指出我正确的方向,我将不胜感激。

unsigned f(unsigned n){
    if(n<2)
    return 1;

    return 1 + f(n/2);
}

5 个答案:

答案 0 :(得分:4)

它是一个对数函数,仅对于基数2.更具体地说,它是 ceil 1 + floor(log2(n))

答案 1 :(得分:1)

由于您担心该函数所基于的数学公式:

这是:fn

的函数
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的索引,又名
  • 最小值为(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))