因此,我试图通过递归函数将数字提高到一定的幂。我的代码对我来说似乎是正确的,但是它的行为很奇怪,因为它只运行一次。我似乎不明白为什么。
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);
}
答案 0 :(得分:3)
让我尝试解决这个问题:
为什么我的递归算法似乎只运行一次?
递归实际上已经完成,但是对输出值没有影响。递归计算的结果将被忽略。
以下一些注释可以使这一点更加清楚:
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;
}
要解决此问题,您应该使用递归函数调用的返回值来实际计算算法的最终输出。
一旦有了这个,就应该解决实现中的其他问题,即它实际上完成了应该做的事情。
答案 1 :(得分:2)
Formula = "=VERT.ZOEKEN(" & SearchTerm & "," & SearchRange & ",5," & False & ")"
ActiveCell.Offset(0, 2).Value = Formula
,因为您的输入是整数,并且您的函数不支持负幂的计算(这将产生非整数结果);因此返回值类型应为整数我不建议您解释每一个错误,而是建议您简单地尝试一下:
double
答案 2 :(得分:1)
改为使用此:
this.notificationListener = firebase.notifications()
.onNotification(notification => {
// this.displayNotification(notification);
this.setState({notification:notification})
});
这是原因: 9 ^ 3 = 9 * 9 ^ 2 = 9 *(9 * 9 ^ 1)= 9 *(9 *(9 * 9 ^ 0))