递归的概念

时间:2010-12-09 04:49:55

标签: c++ recursion

colour[5]={0};

void _do()
{
   colour[i]=1;
   for(int i=0;i<5;i++){
    _do(i);
   }
}

我的问题是,在最后一次递归结束时,我们将开始从最后到第一次的旅程。当我们回到前面的呼叫时,我们会看到什么?我们将所有颜色设置为1吗?或者我们得到剩余的0,那些没有调用那个函数。

问题是,如果我们在一个调用中更新一个数组,我们会在返回上一个调用时得到更新吗?或者我们会得到该数组的先前版本?

提前谢谢。

4 个答案:

答案 0 :(得分:2)

首先,代码不会编译 - 在第5行,你引用“i”而不声明它(发生在第6行)。

即使你修复它,代码也会无限递归 - 你已经点击了“for”循环的第一次迭代,调用_do(1)然后进入“for”循环并再次调用_do(1)

答案 1 :(得分:1)

要开始回程,你需要有一个从函数的最开头开始的if语句,当该语句为true时实际返回一个值。

答案 2 :(得分:0)

如果数组是在递归方法之外定义的,则在递归完成时它将保持更改状态。如果它是在递归步骤(在方法内)中定义而未返回,则从未发生过更改。

答案 3 :(得分:0)

你在这里打破了递归的基本概念 - 递归而不是迭代。这就是你的方式:

int colour[5]={0};

void _do(int i)
{
  if (i < sizeof(colour))
  {
    colour[i]=1;
    _do(i + 1);
  }
}

基本上,你要么迭代,递归。哪一个更好取决于情况,数据结构的类型,您正在使用的其他功能的行为等。

在这种特殊情况下,我通常会迭代。

关于具体问题:该函数的副作用是修改数组colour,这意味着所有修改将立即自动应用于该数组。