因此,我试图通过递归函数将数字提高到一定的幂。我的代码对我来说似乎是正确的,但是它的行为很奇怪,因为它只运行一次。我似乎不明白为什么。
double to_pow(int zahl, int potenz){
zahl+=zahl;
potenz-=1;
if(potenz!=0){
to_pow(zahl, potenz);
}
return zahl;
}
int main(){
double res = to_pow(9,3);
printf("%.lf", res);
}
最佳答案
让我尝试解决这个问题:
为什么我的递归算法似乎只运行一次?
递归实际上已完成,但对输出值没有影响。递归计算的结果将被忽略。
这里有一些注释可以使这一点更加清楚:
double to_pow(int zahl, int potenz){
// we double the first input value and decrease the second input value
zahl+=zahl;
potenz-=1;
if(potenz!=0){
// depending on some criterion we call the function recursively
// but the function has no side-effects and the return value is not used
to_pow(zahl, potenz);
}
// we return the doubled input value
return zahl;
}
要解决此问题,您应该使用递归函数调用的返回值来实际计算算法的最终输出。
一旦有了这个,您就应该解决实施中的其他问题,即它确实完成了应做的事情。