因此,我试图通过递归函数将数字提高到一定的幂。我的代码对我来说似乎是正确的,但是它的行为很奇怪,因为它只运行一次。我似乎不明白为什么。

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;
}


要解决此问题,您应该使用递归函数调用的返回值来实际计算算法的最终输出。

一旦有了这个,您就应该解决实施中的其他问题,即它确实完成了应做的事情。

07-27 13:39