【问题标题】:Recursive function returns segmentation fault递归函数返回分段错误
【发布时间】:2021-06-18 14:34:27
【问题描述】:

我想计算一个数字的幂p,结果得到Segmentation fault。 这段代码应该可以工作:

#include <stdio.h>

int my_power(int nb, int p)
{
    if (nb != 0){
        return nb*my_power(nb, p-1);
    }
    return 1;
}

int main(int argc, char argv[]){

    printf("%d\n", my_power(5, 3));
    return 0;
}

【问题讨论】:

  • 你的参数解析完全关闭了。例如,您需要使用 atoi 将 argv 字符串转换为整数。试试printf("%d\n", my_power(atoi(argv[1]), atoi(argv[2])));
  • 提示:递归什么时候停止?
  • 你永远不会减少你的nb,因此nb != 0永远不会发生,因此程序会占用整个堆栈并死掉。

标签: c recursion segmentation-fault argv


【解决方案1】:

在您的代码中,您的递归永远不会结束。 将基本情况更改为 pb 即可。

【讨论】:

    【解决方案2】:

    我通过检查p 而不是nb 找到了一个解决方案,它奏效了。 我已经为负值和 0^0 情况添加了条件。

    int power(int base, int a) {
        if ( base=0 && a=0){
            return 1;
        }
        if (a!=0){
            return (base * power(base, a-1));
        }else{
            return 1;
            }
    }
    

    感谢您的提示。

    【讨论】:

      猜你喜欢
      • 2017-02-02
      • 2013-04-24
      • 1970-01-01
      • 2018-01-04
      • 2014-11-05
      • 2014-04-27
      • 1970-01-01
      • 2013-03-05
      相关资源
      最近更新 更多