递归函数以某种方式打印

Recursive Function to print in a certain way

本文关键字:式打印 递归函数      更新时间:2023-10-16

完全披露:这是一个硬件问题,我希望您提供最少的代码来解释问题,我感谢我得到的任何帮助。

基本上,我必须编写一个函数,以以下方式递归打印出 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

我不知道我该怎么做。我在玩斐波那契数列,但这似乎是一条死胡同。谢谢!

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

第 2 步:
找出递归方案并建立一个假设:
n==2你的答案是1 2 1,因为n==3 ans 是1 2 1 3 1 2 1然后你突然注意到,对于n==3,你首先为n==2写答案,然后3再为n==2所以到现在为止,你的假设将是 N-1 的 ANS,然后是 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
}

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

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

很简单,您尝试用其较小的数字覆盖每个数字(并且该数字将通过递归为自己重复相同的过程),直到参数 (n) 达到 0。在这种情况下,它将返回而不执行任何操作。

代码将如下所示:

void sequence(int n) {
    if (n == 0)
        return;
    sequence(n-1);
    cout << n << ' ';
    sequence(n-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);
}