2016-10-19 19 views
3

私の仕事は、次の出力を生成する関数を記述することです:再帰呼び出しを元に戻す方法は?

This was written by call number 1. 
This was written by call number 2. 
This was written by call number 3. 
This was written by call number 4. 
This was written by call number 5. 
This was ALSO written by call number 5. 
This was ALSO written by call number 4. 
This was ALSO written by call number 3. 
This was ALSO written by call number 2. 
This was ALSO written by call number 1. 

これは、数5に限定されるものではなく、プログラムがユーザからの任意の入力を取ることができ、それが出力その数よ。

は、ここで私がこれまで持っているものです。

void function_call(int number); 
int main(){ 
    int userInput; 
    cout<<"Please enter a digit: "; 
    cin>>userInput; 

    function_call(userInput); 
} 

void function_call(int number){ 
    if (number == 1){ 
     cout<<"This was written by call number "<<number<<"."<<endl; 
    } 

    else{ 

     function_call(number - 1); 
     cout<<"This was written by call number "<<number<<"."<<endl; 
    } 

} 

私の現在のコードは、最初の部分が、数字が減っていない第二部を出力します。出力の2番目の部分が表示されるようにするにはどうすればよいですか? function_call(1,userInput)を呼び出すとき

+3

何が起こるか見て、再帰呼び出しとprint文の間の順序を変更することでショットを取ります。 – StoryTeller

+1

あなたの「これは通話番号1で書かれました」は、最初の通話ではなく5番目の通話によって書き込まれます。上向きにカウントする必要があるので、2つのパラメータが必要です。 – molbdnilo

+0

@StoryTeller再帰呼び出しの先頭にprintステートメントを置くと、番号が逆に表示されます。しかし、再帰呼び出しの前と後ろにprintステートメントを置くと、 "This ALSO was written"という行が最初に表示されます。私は数字が最初に表示されるように増分したい。 – user2896120

答えて

9

は、これを試してみてください:

void function_call(int curr,int last) 
{ 
    if (curr <= last) 
    { 
     cout<<"This was written by call number "<<curr<<"."<<endl; 
     function_call(curr+1,last); 
     cout<<"This was ALSO written by call number "<<curr<<"."<<endl; 
    } 
} 
関連する問題