2014-12-05 3 views
0

Так что у меня ошибка рекурсии.Прямая и косвенная рекурсия Проблема

я вывожу Хочу ...

Input 4

* * * *

* * *

* *

*

* *

* * *

* * * *

я вывожу Получить ..

Input 4

* Big Blank Space *

Я не могу понять 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

ответ

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; 
    } 
} 
Смежные вопросы