C ++打印降序然后递归零的升序模式

时间:2018-12-05 03:22:40

标签: c++ recursion

因此,我必须执行此递归函数,以输出以下输出:

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;
}

2 个答案:

答案 0 :(得分:0)

让我们剖析您当前拥有的代码:

  1. countz是没有意义的未使用变量,因此只需删除它们即可。

  2. x从未修改,因此无需将其存储在y中。再次,将其删除。

  3. 没有称为printReverseZ的函数。我只是忽略了这一点。

  4. while(x =! 1)永远不会执行-它将x设置为值!1的{​​{1}},并且立即求值为false。

    < / li>
  5. 您不是要导入0命名空间,也不用其全名来限定stdcout -再次出现编译错误。

    < / li>

因此,我们所拥有的是一个损坏的程序,甚至无法编译。但是显然您可以使它以某种方式运行,并且不会产生您想要的输出。

基于以上几点,让我整理一下,以了解您目前可能正在运行的东西,然后进行修复。

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;
}