Recursion 分治算法是如何工作的?

Recursion 分治算法是如何工作的?,recursion,dynamic-programming,induction,Recursion,Dynamic Programming,Induction,我对分而治之(我们使用递归解决问题的技术)和归纳法感到困惑 就像我使用递归对数组排序一样,我将分割整个数组 如下所示: void sortv(vector<int> &v){ if(v.size()==1) { return; } int num=v.back(); v.pop_back(); sortv(v); insert(v,num); } v

我对分而治之(我们使用递归解决问题的技术)和归纳法感到困惑

就像我使用递归对数组排序一样,我将分割整个数组

如下所示:

void sortv(vector<int> &v){

        if(v.size()==1)
          { return; } 

       int num=v.back(); 
        v.pop_back(); 
         sortv(v); 
        insert(v,num); 
      }
void-sortv(向量&v){
如果(v.size()==1)
{return;}
int num=v.back();
v、 向后弹出();
sortv(v);
插入(v,num);
}
因此,当我从数组中减去一个元素后在sort数组中调用sortArray()时,我假设该调用将对数组的大部分进行排序,现在我只需在正确的位置插入最后一个元素

我使用的是分而治之的策略,即将问题分解为更小的子问题和方法,并且你应该知道子问题解决方案之间是如何相互关联的,还是归纳法,即假设你的函数可以解决更小的问题


还是两者相同?

欢迎来到SO!恐怕我没有遵循代码中的逻辑。这种分而治之的局面如何?这似乎不会对数组进行排序,如果
insert
是一个线性遍历,那么算法是O(n^2),而不是D&C。insert是一个递归遍历@ggorlen!请将它的代码显示为,否则我不知道它的复杂性是什么。在没有插入的情况下,该算法已经是线性的了,因为你要单步遍历每个元素,所以它作为D&C失败,D&C通常会将一些东西切成两半。经典的D&C是二进制搜索或合并排序。void sortv(vector&v){if(v.size()==1){return;}int num=v.back();v.pop_back();sortv(v);insert(v,num);}请编辑您的帖子,将其包括在内——此处无法阅读。此外,因为它看起来是在编写C++,所以你不妨提供一个工作,这样我的代码就不会有什么猜测。