递归功能以某种方式打印

时间:2013-10-06 00:37:47

标签: c++ recursion

完全披露:这是一个小问题,我更喜欢你提供最少量的代码来解释这个问题,我很感激我得到的任何帮助。

基本上我必须编写一个函数,以下列方式递归打印出2 ^ n-1项:

The output if n=1 is: 1
The output if n=2 is: 1 2 1
The output if n=3 is: 1 2 1 3 1 2 1
The output if n=4 is: 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1

我不知道如何才能做到这一点。我正在玩斐波纳契系列,但这看起来像死路一条。谢谢!

4 个答案:

答案 0 :(得分:4)

第1步:
首先分析问题。你发现它需要递归。

第2步:
找出递归方案并建立一个假设:
对于n==2,您的答案为1 2 1n==3 ans为1 2 1 3 1 2 1,然后您突然注意到n==3您正在为n==2撰写第一个答案然后3并再次回答n==2 所以现在你的假设将是n-1然后n和n再次回答n-1

第3步:
验证假设:
现在你应该验证你是否正确。你检查了n = 2和n = 4哇!你找到了预期的答案。现在你有一个经过验证的递归假设。来吧,写一个代码。

第4步:
写下代码:
首先找出基本情况:这里是n = 1因为你不能更深入。 所以我们的功能开始如下:

void foo(int n){
    if(n==1){
        cout<<1;
        return ;
    }
}

现在使用我们的假设,写下剩余的代码。

void foo(int n){
    if(n==1){
        cout<<1;
        return ;
    }
    foo(n-1);        //our hypothesis say first we need to write the answer for n-1
    cout<<" "<<n<<" ";  //then writing n itself
    foo(n-1);    //again writing answer for n-1
}

答案 1 :(得分:1)

此函数应作为完整二叉树上的就地遍历工作。就像你有以下树:

        3
    2       2
  1   1   1   1

反映的树在每个级别中具有相同的值。 所以你的功能应该是:

void func(int n) {
  if (n == 1) {
    cout << "1 ";
    return;
  }

  func(n - 1);
  cout << n << ' ';
  func(n - 1);
}

答案 2 :(得分:1)

鉴于已经给出了答案,这里有一个简短的版本:

bool f(int i)
{
    return i && (f(i-1), std::cout << i << ' ', f(i-1));
}

答案 3 :(得分:1)

很简单,你试图用较少的数字覆盖每个数字(并且该数字将通过递归自身重复相同的过程),直到参数(n)达到0.在这种情况下,它将返回而不做任何事情。

代码如下所示:

void sequence(int n) {
    if (n == 0)
        return;

    sequence(n-1);
    cout << n << ' ';
    sequence(n-1);
}