2014-12-05 41 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; 
    } 
}