金字塔的递归函数

时间:2018-12-16 13:45:51

标签: c++ arrays c++11 recursion visual-c++

在我的代码中,n代表块数或no. of pyramids。这段代码仅打印一个金字塔,但是我想编写一个递归函数,通过在每个连续的金字塔中添加两个元素来打印n数量的pyramids

  

例如if n == 3
  第一座金字塔

   1 1 1  
     1  
     

第二座金字塔

 1 1 1 1 1  
   1 1 1  
     1   
     

第三座金字塔

1 1 1 1 1 1 1  
  1 1 1 1 1  
    1 1 1  
      1 
#include "pch.h"
#include <iostream>
//-------------------------------------------------------Function for Pyramid---------------------------------------------------------------
int f(int n)
{
int no_rows, no_columns;

no_columns = n;
no_rows = n - 1;

//-------------------------------------------------------Loop for the Pyramid---------------------------------------------------------------
for (int i = 1; i <= no_rows; i++)
{
    for (int j = 0; j < no_columns; j++)
    {
        std::cout << "*";
    }
    std::cout << "\n";
    no_columns = no_columns - 2;

    for (int k = 0; k < i; k++)
    {
        std::cout << " ";
    }
}
if (n == 0) return -1;
return f(n);
}

int main()
{
int n;
std::cout << "Please Enter the number of Blocks: ";
std::cin >> n;
//-------------------------------------------------------Printing the n blocks---------------------------------------------------------------
std::cout << f(n) << std::endl;
std::cout << f(n + 2) << std::endl;
std::cout << f(n + 4) << std::endl;
system("pasue");
}

2 个答案:

答案 0 :(得分:1)

我定义以下例程来编写底长为bl的金字塔。 这对您来说很好。

DEMO

void writePyramid(int bl)
{        
    for (int j = bl, j_space=0; j>0; j-=2, ++j_space)
    {
        for(int k=0; k< j_space; ++k){
            std::cout << " ";
        }

        for (int l = 0; l<j; ++l){
            std::cout << "*";
        }

        std::cout << "\n";        
    }
}

答案 1 :(得分:0)

他希望递归地完成所有工作,所以像这样:

void writePyramid(int bl)
{        
    if (bl > 4)
      writePyramid(bl - 2);

    for (int j = bl, j_space=0; j>0; j-=2, ++j_space)
    {
        for(int k=0; k< j_space; ++k){
            std::cout << ' ';
        }

        for (int l = 0; l<j; ++l){
            std::cout << '*';
        }

        std::cout << '\n';        
    }
}

writePyramid 的唯一调用可以完成所有操作