473,242 Members | 1,350 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,242 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 2845
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: abbasky | last post by:
### Vandf component communication method one: data sharing ​ Vandf components can achieve data exchange through data sharing, state sharing, events, and other methods. Vandf's data exchange method...
2
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 7 Feb 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:30 (7.30PM). In this month's session, the creator of the excellent VBE...
0
by: fareedcanada | last post by:
Hello I am trying to split number on their count. suppose i have 121314151617 (12cnt) then number should be split like 12,13,14,15,16,17 and if 11314151617 (11cnt) then should be split like...
0
by: stefan129 | last post by:
Hey forum members, I'm exploring options for SSL certificates for multiple domains. Has anyone had experience with multi-domain SSL certificates? Any recommendations on reliable providers or specific...
0
Git
by: egorbl4 | last post by:
Скачал я git, хотел начать настройку, а там вылезло вот это Что это? Что мне с этим делать? ...
1
by: davi5007 | last post by:
Hi, Basically, I am trying to automate a field named TraceabilityNo into a web page from an access form. I've got the serial held in the variable strSearchString. How can I get this into the...
0
by: MeoLessi9 | last post by:
I have VirtualBox installed on Windows 11 and now I would like to install Kali on a virtual machine. However, on the official website, I see two options: "Installer images" and "Virtual machines"....
0
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...

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.