473,385 Members | 1,569 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,385 software developers and data experts.

Recursive Function Help (pls) pt 2

OK:
Purpose: Using user's input and 3 recursive functions, construct an hour
glass figure. Main can only have user input, loops and function calls.
Recursive function 1 takes input and displays a sequence of spaces;
recursive function 2 uses input to display ascending sequence of digits;
likewise, recursive function 3 uses input to display descending sequence of
digits.

I have not followed the instructions completely regarding the digits, but I
feel I'm close - I'm looking for suggestions for the spacing issue - I'm
baffled there. The following in the output from my program:
Enter an integer between 1 and 9 : 4
012343210012343210
01232100123210
0121001210
0101010
1Press any key to continue

It should display
012343210012343210
01232100123210
0121001210
010010
00
00
010010
0121001210
01232100123210
012343210012343210
Here's my code:

#include <iostream>
#include <string>
using namespace std;
void Spacing (int);
void Ascending (int, int);
void Descending (int);
// Main can only have the function calls and loops
int main()
{
cout <<"Enter an integer between 1 and 9 : ";
int Value;
cin >> Value;

int count = 0;
while (Value > count)
{
Ascending (0, Value);
Spacing (Value);
Ascending (0, Value);
cout <<endl;
Spacing (Value);
// Descending (Value);
--Value;
}

return 0;
}
// This recursive function takes user input and displays given number of
spaces
void Spacing (int n)
{
char c = ' ';
string space = "";
int i = n;
n = n - (i - 1);
while (i <= n)
{
cout<<n;
++i;
}
}
/* This was an experiment for Function descending
string Reverse (int Number)
{
string s = "";
string c;
for(int bit; Number != 0;)
{
bit = Number % 2;
Number = Number / 2;
c = char ('0' + bit);
s = s + c;
}
cout <<s<<endl<<endl;
return s;
}
*/
// This recursive function is supposed to only take the user
// input and display each digit from 0 - number -
// It's currently displaying all my digits (I'm working on it)
void Ascending (int current, int stopval)
{
cout <<current;
if (current < stopval)
{
Ascending(current + 1, stopval);
cout << current;
}
}
// Again, this will be the recursive descending fuction
// used only to display input number - 0.
/*void Descending (int descend)
{
while (descend >= 0)
{
cout <<descend;
descend--;
}
cout << endl;
}
*/
Jul 22 '05 #1
2 2859
mi******@sbcglobal.net wrote:

OK:
Purpose: Using user's input and 3 recursive functions, construct an hour
glass figure. Main can only have user input, loops and function calls.
Recursive function 1 takes input and displays a sequence of spaces;
recursive function 2 uses input to display ascending sequence of digits;
likewise, recursive function 3 uses input to display descending sequence of
digits.


May I suggest you forget the hourglass at the moment and simply concentrate
on the individual pieces. It's much simpler that way.

OK. Your assignment is to write a function (which must be recusive) to output
a given number of spaces.

The goal is: output a given number of spaces.
Q: When is this goal extremely simple to reach?
A: If the number of spaces to output equals 0. Because then the
function has to do nothing.

So lets start writing the function with what we know up to now:

void Spacing( int n )
{
if( n == 0 )
return;

Q: What about other numbers?
A: Those cases are much to hard for us, thus we take a lazy approach:
If the goal is to output n spaces, let us output 1 space and let us
call a function which outputs the remaining n-1 spaces.
Q: But which function should we call?
A: Well, there is function Spacing. This function claims to be able to
output n spaces, thus it must be simple for this function to output
n-1 spaces.

void Spacing( int n )
{
if( n == 0 )
return;

cout << " ";
Spacing( n-1 );
}
Q: That's it?
A: That's it!
See. In the recursive call there is always 1 subtracted from n.
So if we start out with a value of lets say 5 for n, what happens.
5 doesn't equal 0, thus the if is not taken.
1 space gets sent to cout, then function Spacing is called with an
argument of 5 - 1 -> 4. That function does:
send 1 space to cout
call function Spaceing with an Argument of 4 - 1 -> 3. That function does:
send 1 space to cout
call function Spaceing with an Arg. of 3 - 1 -> 2. That function does:
send 1 space to cout
call function Spacing with an Arg. of 2 - 1 -> 1. That function does:
send 1 space to cout
call function Spaceing with an Arg. of 1 - 1 -> 0. That function does:
the first if detects that the passed argument happens to be 0, thus
it simply returns
function returns
function returns
function returns
function returns
function returns

and the program returns to the called which called Spacing( 5 ). Now count
how many spaces have been sent to cout. They are exactly 5. Each invocation
of Spacing, with the exception of the last one, has output exactly 1 space.

The trick is the subtraction. By always subtracting 1, we make the number of
spaces to output smaller and smaller until we finaly hit 0. And this is our
simple case, we know how to deal with that: do nothing.

--
Karl Heinz Buchegger
kb******@gascad.at
Jul 22 '05 #2


I'm sure you'll be able to extend Karl's tutorial to the other
functions. Each time the function calls itself again, it is not the
same n, I hope you understand; even though it has the same name. If
you have too much trouble, just tell us.

Much nicer code, by the way. :)

Jul 22 '05 #3

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: | last post by:
Hello All, this is my first post. OK - The goal is to display the following (note: substitute 1' ' for 2'*') by using 3 recursive functions. 0123454321001234543210 **012343210012343210**...
4
by: Nicolas Vigier | last post by:
Hello, I have in my python script a function that look like this : def my_function(arg1, arg2, opt1=0, opt2=1, opt3=42): if type(arg1) is ListType: for a in arg1: my_function(a, arg2,...
4
by: Victor | last post by:
Hello, I've got a situation in which the number of (valid) recursive calls I make will cause stack overflow. I can use getrlimit (and setrlimit) to test (and set) my current stack size. ...
9
by: Csaba Gabor | last post by:
Inside a function, I'd like to know the call stack. By this I mean that I'd like to know the function that called this one, that one's caller and so on. So I thought to do: <script...
2
by: Synapse | last post by:
hi everyone..i need help on the code below. i want to convert it to a recursive function. can anyone help me..pls! thanks a lot!:) #include <iostream.h> int main() { int i, j; ...
3
by: Babikie | last post by:
Write a program that performs a reverse recursion with following functions. void swop (char,int,int); void reverse (char); void rev(char,int, int); User should enter a string and all character...
3
by: NatRoger | last post by:
Hi, We are using DB2 V7 (MVS) in our shop, which dont have the luxury of the 'WITH clause' - CTE support to accomplish recursive queries. Here is my problem - Table1 From-ID To-ID A1 ...
3
by: from.future.import | last post by:
Hi, I encountered garbage collection behaviour that I didn't expect when using a recursive function inside another function: the definition of the inner function seems to contain a circular...
3
by: Davy | last post by:
Hi all, Sometimes I need to pass same parameter in recursive function. From my point of view, the style is redundant, and I don't what to use some global style like self.A, self.B, Is there any...
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...
0
by: ryjfgjl | last post by:
In our work, we often need to import Excel data into databases (such as MySQL, SQL Server, Oracle) for data analysis and processing. Usually, we use database tools like Navicat or the Excel import...
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.