2014-12-05 48 views
0

所以我有一个递归错误。直接和间接递归问题

输出我想要...

输入4

* * * *

* * *

*

*

* *

* * *

* * * *

输出我找..

输入4

*大片空白*

我看起来不好意思ap我的头非常好递归。

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

有人能指出我的错误吗?

+0

你不需要大写每个单词:) – cepradeep 2014-12-05 18:54:29

回答

0

与任何递归有你需要定义两个东西:

  1. 结束条件
  2. 一个depth值(和您需要的任何其他信息)

在你如果结束条件为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; 
    } 
}