【问题标题】:Divide and conquer sum algorithm分而治之和算法
【发布时间】:2020-10-05 16:42:07
【问题描述】:

我一直在寻找一些 D&C 算法,结果发现了这个

int sumArray(int anArray[], int size)
{
    //base case
    if (size == 0)
    {
        return 0;
    }
    else if (size == 1)
    {
        return anArray[0];
    }

    //divide and conquer
    int mid = size / 2;
    int rsize = size - mid;
    int lsum = sumArray(anArray, mid);
    int rsum = sumArray(anArray + mid, rsize);
    return lsum + rsum;
} 

但每次我在没有基本情况的情况下运行代码时,它都会返回段错误错误。 我试图弄清楚为什么这个基本情况如此重要,以至于即使运行 n>1 它仍然返回该错误,有人会在这里伸出援手吗?

【问题讨论】:

  • 如果你从不作为基本情况返回,你显然会永远递归......这将用堆栈帧填满堆栈,从而导致段错误。

标签: c++ sorting array-algorithms


【解决方案1】:

因为函数sumArray会递归调用自己,

    int lsum = sumArray(anArray, mid);
    int rsum = sumArray(anArray + mid, rsize);

无论数组大小如何,都需要基本情况​​。否则 Fnction 永远无法退出调用自身的循环! 请记住,基于midrsize 之一可能是奇数甚至是size == 0size == 1 的两个基本情况这一事实:

    if (size == 0)
    {
        return 0;
    }
    else if (size == 1)
    {
        return anArray[0];
    }

需要

【讨论】:

  • 哦,是的,当然,我忘了递归部分,谢谢。
  • @theguissan 不客气。并感谢您提出问题。也不要太关注否决票
猜你喜欢
  • 2013-02-02
  • 2012-01-01
  • 2013-02-03
  • 2019-06-03
  • 2017-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
相关资源
最近更新 更多