2016-11-25 91 views
0

我做了什么伪代码告诉我在书中介绍的算法和内部排序没有工作递归和C++

有两个部分,我真的不明白

1,怎么办你做一个递归函数,这是一个无效的,我的意思是不应该递归函数总是返回最后一步,然后在它之前..这是一个无效,所以它会如何预处理任务012-merg_sor()被调用两次一个功能..做u调用嵌套的递归?还是什么? ..它是如何影响MERG功能

#include <iostream> 
#include <vector> 

using namespace std; 
void Merg(vector<int> Arr,int start,int middle,int end) 
{ 
    std::vector<int> left; 
    std::vector<int> right; 
    for(int i =start;i<(end-start);i++) 
    { 
     if (i <middle) 
     { 
      right.push_back(Arr.at(i)); 
     } 
     else 
     { 
      left.push_back(Arr.at(i)); 
     } 
    } 
    int j=0; 
    int k=0; 
    for(int i =start;i<(end-start);i++) 
    { 
     if(right.at(j)<=Arr.at(i)) 
     { 
      Arr.at(i)=right.at(j); 
      j++; 
     } 
     else 
     { 
      Arr.at(i)=left.at(k); 
      k++; 
     } 
    } 
} 
void Merg_sort(vector<int> Arr,int start,int end) 
{ 
    if (start <end) 
    { 
     int middle = (start+end)/2; 
     Merg_sort(Arr,start,middle); 
     Merg_sort(Arr,middle+1,end); 
     Merg(Arr,start,middle,end); 
    } 
} 

int main() 
{ 
vector<int> x; 
for (int i =0;i<8;i++){x.push_back(i);} 
x.at(2)=8; 
Merg_sort(x,0,7); 
} 
+0

即,直接或间接地调用自身的功能是一个递归函数的定义。何时,何地以及如何多次自称是无关紧要的。 –

+0

1)的变化就地完成。也就是说,'Arr'参数正在被修改。 2)这只是递归。 3)'if(start

+4

您应该通过引用'vector &Arr'传递向量,使结果在main中可见。 –

回答

0

1,您是如何使一个递归函数是一个void我的意思是不应该的递归函数总是返回最后一个步骤又是什么才..这是一个无效,所以它会如何执行任务

函数可能有副作用。这意味着,一个函数可以修改程序的状态。 void函数总是以副作用起作用。不具有副作用void函数是完全无用的。函数是否递归对这个问题没有影响。

2-merg_sor()在一个函数中被调用了两次..你是否调用嵌套的递归?或者什么?

我不知道这是否是常用的名词,但我将之形容为多分枝递归

2 ..和它是如何影响MERG功能

没有,因为它没有副作用。

我做了什么伪代码告诉我

也许你没有正确理解的伪代码。或许论据是隐含引用在伪语言,因为它们是在像Python语言,你正在阅读这样的。

+0

2)被调用两次不会产生4个数组,它们是从最后一步中分割出来的,这会产生4个数字,对吗?..如果是这样,我们只有一个用于合并2个数组的merg命令,而不是4个他们但2 ..它是如何执行的? –