[SW将校学校ジャングル]WEEK 01開発ログ-II
さいきかんすう
貴重な関数バー
再帰関数とは、ある関数で自分自身を再呼び出して操作を実行する関数です.すなわち,関数定義内に同名の関数が現れる場合を再帰関数と呼ぶ.再帰関数を使用する場合は、スタックオーバーフローを防止するには、終了条件が必要です.
재귀함수의 기본 구조
int sum(int n)
{
# 탈출 조건
if (1 == n) {
return 1;
# 자신보다 1만큼 작은 숫자를 분신을 만들어서 계산을 시킨다.
# 분신이 계산을 마치면 자신의 현재 값을 거기에 더한다.
} else {
return sum(n-1) + n;
}
}
再帰関数の呼び出しと戻し各関数が呼び出されると、メモリに新しい空間が解放され、毎回全く異なる空間で動作します.ソースコードでは同じ空間のように見えますが、実際に実行されるコードはまったく異なる空間で行われます.
main()関数が最初に再帰関数を実行すると、「再帰関数1」というメモリ領域が生成され、操作時に再帰関数を再実行すると、「再帰関数2」という新しいメモリ領域が生成されます.
このように繰り返すと、同じコードはメモリ空間でしか移動せず、メモリが不足するまで無限に繰り返され、プログラムが終了するため、再帰関数を記述する際に、いつ停止すべきかに条件が必要になります.
上図では、「再帰関数3」は、逃げ条件に遭遇して実行を停止し、前の関数に戻り、残りのコードを実行し続け、前の関数に戻る.
TIP
関数の実行コードはメモリに一度だけ格納されます.これは正しいですが、ローカル変数やパラメータなどは、以前の関数呼び出しとは全く関係なく、まったく異なる空間で新しく作成されます.したがって,呼び出すたびに新しいオブジェクトが生成されると考えられる.
再帰関数の長所と短所
再帰関数の利点
白俊宰の関数問題について
Reference
この問題について([SW将校学校ジャングル]WEEK 01開発ログ-II), 我々は、より多くの情報をここで見つけました https://velog.io/@ktkdgh/SW사관학교정글-WEEK01-개발일지--t0xjpn2fテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol