我想编写功率递归函数,它的分析是o(n): 这是我的想法 这是真的吗? 或者,如果这个代码的分析不是o(n),任何人都可以帮助我改变它以使其更好吗? 提前谢谢
power(int x , int n)
{
if(n==0)
return 1;
else
return x*power(x,n-1);
}
答案 0 :(得分:1)
有两个问题:
之后,代码应该可以工作。它将在线性时间内表现为功率,因此它将为O(k)。
答案 1 :(得分:1)
此方法为O(k),而不是O(n),因为它将执行k
递归调用。此外,k
的基本案例0
应返回1
,而不是n
。
答案 2 :(得分:1)
这是O(n)时间,因为你从输入n向下计数到n为0。
答案 3 :(得分:1)
你正在递归地调用你的函数“k + 1”次。电源示例(10,3),您可以进行以下函数调用
power(10,3) -
power(10,2) | k+1 times
power(10,1) |
power(10,0) -
因此,复杂性是O(k)而不是O(n)!
答案 4 :(得分:1)
你正在调用你的函数“k”,它的上限与它的下限匹配。所以我认为这是Theta(k)