Recursive Function Help (pls) pt 2

Discussion in 'C++' started by Guest, Dec 12, 2003.

  1. Guest

    Guest Guest

    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;
    }
    */
    Guest, Dec 12, 2003
    #1
    1. Advertising

  2. 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
    Karl Heinz Buchegger, Dec 12, 2003
    #2
    1. Advertising

  3. Guest

    Dan W. Guest

    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. :)
    Dan W., Dec 12, 2003
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Kapil Shah via DotNetMonster.com

    Crystal Report function-pls help

    Kapil Shah via DotNetMonster.com, Feb 24, 2005, in forum: ASP .Net
    Replies:
    1
    Views:
    3,521
    =?Utf-8?B?Q2hyaXMgUG9kbW9yZQ==?=
    Feb 25, 2005
  2. Guest
    Replies:
    3
    Views:
    542
    Guest
    Dec 12, 2003
  3. n00m
    Replies:
    12
    Views:
    1,100
  4. vamsi
    Replies:
    21
    Views:
    2,043
    Keith Thompson
    Mar 9, 2009
  5. Mark Piffer
    Replies:
    9
    Views:
    895
    luserXtrog
    May 15, 2009
Loading...

Share This Page