递归函数以某种方式打印
Recursive Function to print in a certain way
完全披露:这是一个硬件问题,我希望您提供最少的代码来解释问题,我感谢我得到的任何帮助。
基本上,我必须编写一个函数,以以下方式递归打印出 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);
}
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何在Elixir中调用递归函数并行
- 递归函数有效,但无法记忆
- 为什么我的递归函数按降序打印,然后按升序打印?
- 为什么递归函数的最终输出是 5?
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 如何将记忆应用于此递归函数?
- 如何从递归函数中完全返回,该函数给出了每个函数结果的累积相加?
- 无穷大而循环时具有递归函数
- 即使没有调用这个递归函数,它是如何工作的?
- 如何使此递归函数从给定的起始位置返回最小的整数?
- 此递归函数的每次迭代的值存储在哪里?
- C++从递归函数中打印出奇怪的字符
- 如何在递归函数中打印向量
- 如何使用递归函数打印节点树
- 在递归函数中打印一次变量,该变量会随着每次递归而不断变化
- 尝试优化和理解打印数字除数的递归函数的运行时
- 递归函数以某种方式打印
- 为什么递归函数打印正确的值,而调用后的cout语句却没有打印正确的值?
- 在递归函数中打印c++中累积的总和