2011-04-08 135 views
0

有一个递归函数f()。它正在查看cond,然后返回或执行f(),然后g()。考虑将cond作为一个外部变量,可以在其他地方设置,也许在不同的线程中。将迭代函数更改为迭代

  1. 如果第一五次cond被选中,cond == true,但第六时间,cond == false,描述代码流。

  2. 因为这是递归的,所以如果cond == true的时间太长,代码可能会遭受堆栈溢出。填写函数iterative_f(),以使代码流与(1)中的代码流相同。

    //recursive 
    
    void f() 
    { 
        if(cond == false) 
         return; 
        f(); 
        g(); 
    } 
    
    //iterative 
    void iterative_f() { 
    
    } 
    
+1

所以遗憾地看到教师提供'boolean_variable == FALSE'!请使用'if(!cond)'或'if(not cond)'(等效和标准,尽管我不确定是否甚至MSVC++ 2010支持“不”) - 认为他们太担心打破人们打电话他们的变量“不”)。 – 2011-04-08 04:23:59

+0

@Tony:'not'不是C关键字。 – JeremyP 2011-04-08 10:47:12

+0

JeremyP:true - 仅限于C++ - 我应该检查问题的标签: - /。 – 2011-04-08 16:49:58

回答

4
  1. 由于cond是假的第6次,该功能将有效执行5次。结果是函数g将被执行5次。

  2. 现在你可以写出如下迭代函数:

 
    void iterative_f() 
    { 
     while(cond) 
     { 
      g(); 
     } 
    } 
+0

我在接受采访时被问及这是我确切的答案。然而,面试官说这个迭代函数会改变函数g()被调用的顺序。在递归函数中,首先调用函数g()的第五个实例。但是,这个迭代版本会首先调用第一个实例。 – tbag 2011-04-08 18:48:45

+0

是的,这可能是一个合乎逻辑的论点。但是对一个函数进行一系列的调用不能有特定顺序的概念。 – bala 2011-04-09 07:04:20

+0

让我们以更简单的方式。对于递归函数,我们不是首先调用函数g()的第5个实例,但是我们在函数f()的第5次调用中第一次调用函数g()。至于迭代函数,我们在第一次迭代中第一次调用函数g()。那有意义吗? – bala 2011-04-09 07:11:20