-1

このプログラムは機能し、必要なことを行います。私の質問は、ReverseName 関数と、それが正確にどのように機能するかに関するものです。私の本のいくつかの例からリバース エンジニアリングを行うことができましたが、それがどのように機能するかはよくわかりません。名前が送信されます。逆に印刷される方法がわかりません。

#include <iostream>
using namespace std;


void ReverseName(char *s ); 

int main(void){ 

    char Name[] ="John Doe";

    cout << "Name is: " << Name << "\n" << "Name Backwards is: " ;

    ReverseName(Name); 

    cout << "\nName is: "<< Name << '\n';

    return 0; 
} 

void ReverseName(char * s){ 

    if(*s){ 
        ReverseName(s+1); 
        cout << *s; 
        } 

    return; 
}
4

3 に答える 3

2
void ReverseName(char * s){ 

    if(*s){ 
        ReverseName(s+1); // come into the end of the string 
        cout << *s; 
        } 

    return; 
}

それはちょうどこのように:

'J'
call --> 'o'
         call  ---> 'h'
                    call  ---> ...
                               call  ---> 'e'    (Recursion to the end)

スタックが再帰の終わりに来ると、順番に実行されます。それからそれはちょうど好きです。

                                       cout << 'e'
                            cout << ...
                 cout << 'h'
        cout << 'o'
cout << 'J' 

(come back from the call stack)
于 2013-11-05T03:54:22.837 に答える
0

ReverseName() は再帰関数です。

http://www.learncpp.com/cpp-tutorial/710-recursion/

于 2013-11-05T05:10:51.333 に答える