因此,我必须执行此递归函数,以输出以下输出:
000
00
0
00
000
这是我编写的程序。我如何使下半年开始工作?
#include<iostream>
void printZpattern2(int x){
int count = 0;
int y = x;
int z = x;
for (int i=0; i<x; i++){
cout << "0";
count ++;
}
cout << endl;
if (x == 1){
printReverseZ(y + 1);
}
while (x =! 1){
printZpattern2(x -1);
}
}
int main(){
printZpattern2(5);
return 0;
}
答案 0 :(得分:0)
让我们剖析您当前拥有的代码:
count
和z
是没有意义的未使用变量,因此只需删除它们即可。
x
从未修改,因此无需将其存储在y
中。再次,将其删除。
没有称为printReverseZ
的函数。我只是忽略了这一点。
while(x =! 1)
永远不会执行-它将x
设置为值!1
的{{1}},并且立即求值为false。
您不是要导入0
命名空间,也不用其全名来限定std
和cout
-再次出现编译错误。
因此,我们所拥有的是一个损坏的程序,甚至无法编译。但是显然您可以使它以某种方式运行,并且不会产生您想要的输出。
基于以上几点,让我整理一下,以了解您目前可能正在运行的东西,然后进行修复。
endl
好的,现在打印前半部分:
void printZpattern2(int x)
{
for (int i=0; i<x; i++)
std::cout << "0";
std::cout << std::endl;
if (x != 1)
printZpattern2(x - 1);
}
现在应该很明显,打印后半部分的方法是在递归调用之后输出 。 即,一旦函数处理完所有情况,直到单个零。
就这么简单
00000
0000
000
00
0
就这个简单的功能而言,我个人将使用if (x != 1) {
printZpattern2(x - 1);
for (int i=0; i<x; i++)
std::cout << "0";
std::cout << std::endl;
}
构造函数而不是循环创建零:
std::string
请注意,我进行了额外的检查,如果您使用值为零或更小的值调用该函数,则可以避免出现问题。
答案 1 :(得分:-2)
我确实了解新手在StackOverflow上发布问题时通常会面临的困难。没有任何解释就丢下了很多沮丧的表情……
无论如何,这是我解决您问题的方法:
#include <iostream>
using namespace std;
void printZeros(int n) {
for (int x = 0; x < n; ++x) {
cout << "0";
}
cout << endl;
}
void printZPattern(int n) {
static int init = n;
static bool down = true; // true <- down, false <- up
if (n < 1 || n > init) {
return;
}
printZeros(n);
if (down) {
--n;
if (n < 1) {
down = false;
n = 2;
}
} else {
++n;
}
printZPattern(n);
}
int main()
{
printZPattern(5);
return 0;
}