Not a valid comparison since you changed the calling
conversion!
--- "[EMAIL PROTECTED]"
<[EMAIL PROTECTED]> wrote:
> > Mickey Mathieson a écrit :
> > ...
> >
> > The second if test is not needed MY MISTAKE!!!
> > Not paying complete attention.
> >
> > If you think you can come up with a BETTER
> RECUSIVE
> > SOLUTION lets see it! Otherwise your blowing wind.
> >
> >
>
> Ok let's try a complet test suite....
> (I have already post a probably better - faster -
> recursive
> solution )
>
> // BEGIN CODE
> #include <time.h>
> #include <sys/time.h>
>
> #include <iostream>
> #include <iomanip>
> #include <algorithm>
> using namespace std;
>
> char chaine[] = "eorvneoiruvnieabuvraiebrvlaebvlae\
> iebrvlaebvlaebrvlaebrvlajehbreorvneoiruvnieabuvraie\
> iebrvlaebvlaebrvlaebrvlajehbreorvneoiruvnieabuvraie\
>
iebrvlaebvlaebrvlaebrvlajehbreorvneoiruvnieabuvraie";
>
> // your iterative reverse
> char *RevStr(char *str )
> {
> int len = strlen(str);
> for (int i = 0; i < len/2; i++)
> {
> char C = str[i];
> str[i] = str[len-i-1];
> str[len-i-1] = C;
> }
> return(str);
> }
>
> // mine iterative reverse (no strlen cost)
> char* reverse( char* str )
> {
> char* begin = str, *end = str;
> while( *end ) ++end; // go to the end
> while( end > begin )
> { // swap begin and end until they join
> char c = *--end;
> *end = *begin;
> *begin++ = c;
> }
> return str;
> }
>
> // your Recursive Reverse String
> char *RevStr(int count, char *str)
> {
> if (!count) return(str);
> char Value = str[count-1];
> RevStr(count-1, str);
> str[strlen(str) - count] = Value;
> return(str);
> }
>
> // mine recursive reverse between
> // [begin,end] ( div by 2 numbers and depth calls )
> char* reverse_r( char* begin, char* end )
> {
> if ( end <= begin ) return begin;
> char c = *end; *end = *begin; *begin = c; //swap
> reverse_r( begin+1, end-1 );
> return begin;
> }
>
> // A simple scope-chrono
> struct Chrono {
> timeval tv_begin;
> Chrono() { gettimeofday( &tv_begin, 0 ); }
> ~Chrono()
> {
> timeval tv_end;
> gettimeofday( &tv_end, 0 );
>
> time_t elapsedSecond = tv_end.tv_sec -
> tv_begin.tv_sec;
> useconds_t elapseduSecond = tv_end.tv_usec -
> tv_begin.tv_usec;
> if ( elapseduSecond < 0 ) {
> elapseduSecond += 1000000;
> --elapsedSecond;
> }
> cout << " Duration = " << elapsedSecond << ","
> << setfill( '0' ) << setw( 6 ) <<
> elapseduSecond <<
> endl;
> }
> };
>
> // some launchers
> void test( char* (*fct)(char* ), int num ) {
> Chrono c;
>
> for ( int i = 0; i < num; ++i )
> fct( chaine );
> }
>
> void test_r1( int num ) {
> Chrono c;
>
> size_t size = strlen( chaine );
> for ( int i = 0; i < num; ++i )
> RevStr( size, chaine );
> }
>
> void test_r2( int num ) {
> Chrono c;
>
> size_t size = strlen( chaine );
> for ( int i = 0; i < num; ++i )
> reverse_r( chaine, chaine + size - 1 );
> }
>
> // -------------------
> int main( int argc, char*argv[])
> {
> int numLoop = (argc>1?atoi(argv[1]):10000);
>
> // tests
> cout << RevStr( strlen( chaine ), chaine ) <<
> endl;
> cout << reverse_r( chaine, &chaine[0] +
> strlen(chaine)-1 )
> << endl;
> cout << RevStr( chaine ) << endl;
> cout << reverse( chaine ) << endl;
>
> test( RevStr, numLoop ); // your iterative
> test( reverse, numLoop ); // mine iterative
> test_r1( numLoop ); // your recursive
> test_r2( numLoop ); // mine recursive
> }
>
>
> // END CODE
>
> Using 50000 iterations on a relative short string
>
> first result in second at your (iterative only)
> advantage on
> hp-ux using aCC
> Duration = 0,051188
> Duration = 0,059516
> Duration = 2,055472
> Duration = 1,4294049812
>
> second result in second at mine advantage on linux
> using g++ 3.4
>
> Duration = 0,037910
> Duration = 0,013299
> Duration = 3,811505
> Duration = 0,023039
>
> under an unix flavor you can make your own tests (or
> port
> the chrono
> under windows)
>
> Regards,
> David
>
>
> ------------------------ ALICE C'EST ENCORE MIEUX
> AVEC CANAL+ LE BOUQUET ! ---------------
> Découvrez vite l'offre exclusive ALICEBOX et CANAL+
> LE BOUQUET, en cliquant ici http://alicebox.fr
> Soumis à conditions.
>
>
>
____________________________________________________________________________________
Need Mail bonding?
Go to the Yahoo! Mail Q&A for great tips from Yahoo! Answers users.
http://answers.yahoo.com/dir/?link=list&sid=396546091