直接和间接递归问题

时间:2014-12-05 18:35:15

标签: c++ recursion

所以我有一个递归错误。

OutPut I Want ...

  

输入4
  
  * * * *
  
  * * *
  
  * *
  
  *
  
  * *
  
  * * *
  
  * * * *

OutPut I Get ..

  

输入4
  
  *大空格*

我似乎不能很好地绕过我的脑袋递归。

#include<iostream>
#include<fstream>
#include<string>
#include<windows.h>
#include<ctime>

using namespace std;

int i;
bool end = false;
int changer = -1;
int placeHolder;
bool recursionUp(int num1)
{
    if(num1 == placeHolder)
    {
        return true;
    }
    for(i = placeHolder; i == num1; i--)
    {
        cout << "*";
    }
    cout << "\n";
    recursionUp(num1 + 1);
}

bool cont = false;
int recursion(int num1)
{
    if(num1 == 0)
    {
        cont = recursionUp(num1);
    }
    for(i = 1; i <= num1; i++)
    {
        cout << "*";
    }
    recursion(num1 - 1);
    if(cont)
    {
        return 0;
    }
}

int main()
{
    int number;
    cout << "Input Star Number...\n";
    cout << "\t Input: ";
    cin >> number;
    placeHolder = number;
    recursion(number);
    return 0;
}

有人可以指出我的错误吗?

1 个答案:

答案 0 :(得分:0)

与任何递归一样,您需要定义两件事:

  1. 结束条件
  2. depth值(以及需要的任何其他信息)
  3. 在您的情况下,结束条件是depth == number - 1

    您希望在每次递归之前和之后打印。

    void recursion(int depth){
        if (depth <= 1) {
            cout << '*' << endl << endl;
        }else{
            for (int i = 0; i < depth; ++i)cout << "* ";
            cout << endl << endl;
            recursion(depth - 1);
            for (int i = 0; i < depth; ++i)cout <<"* ";
            cout << endl << endl;
        }
    }