为什么该程序只能运行一次?

时间:2019-12-05 10:46:48

标签: c recursion

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

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

3 个答案:

答案 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)

  1. 您似乎不需要Formula = "=VERT.ZOEKEN(" & SearchTerm & "," & SearchRange & ",5," & False & ")" ActiveCell.Offset(0, 2).Value = Formula ,因为您的输入是整数,并且您的函数不支持负幂的计算(这将产生非整数结果);因此返回值类型应为整数
  2. 出于相同的原因,指数类型应为非负整数
  3. 您的逻辑在很多地方是错误的(包括其他问题在您的问题注释中所解释的,即您没有返回递归函数调用的事实)

我不建议您解释每一个错误,而是建议您简单地尝试一下:

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))