【发布时间】:2013-10-23 13:44:09
【问题描述】:
我正在考虑这个问题,假设我有一个幂函数的递归版本:
double pow(double base, int power){
if(power == 1 || power == 0){
return base;
}
else if(power % 2 == 0){
double result = pow(base,power/2);
return result * result;
}
else{
double result = pow(base,(power-1)/2);
return result * result * base;
}
}
我的问题是如何将这个转换为 while 循环?
编辑:我知道这可以通过显式维护堆栈来完成,但在这种特殊情况下,是否有机会不这样做?
【问题讨论】:
-
@devnull 我是一名助教,被问到这个问题,但不知道如何回答
-
这也不是真正的尾递归,因为尾递归授予的优化在这种情况下不适用。通过编辑,它肯定不是尾递归。
-
@Dan 编辑并移出尾递归位
-
纠正你的代码:如果
power==0那么你的函数应该返回1而不是base。 -
@dorafmon
I am a TA and got asked the question, but do not know how to answer-- 我非常同情你们的学生。
标签: c algorithm loops recursion