SlideShare une entreprise Scribd logo
1  sur  19
sum(3)の動作の様子
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
sum(3)
呼び出し
n = 3でsum関数が呼び出されました。
n = 3
sum(3)の動作の様子
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 3
sum(3)
呼び出し
n == 3 なのでif文の中身は実行されません。
sum(3)の動作の様子
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 3
sum(3)
呼び出し
sum(n – 1)つまりsum(2)が呼び出されます。
sum(3)の動作の様子
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 3
sum(3)
呼び出し
sum(2)が呼び出されました。
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 2
sum(2)
呼び出し
sum(3)の動作の様子
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 3
sum(3)
呼び出し
n == 2 なのでif文の中身は実行されません。
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 2
sum(2)
呼び出し
sum(3)の動作の様子
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 3
sum(3)
呼び出し
sum(n – 1)つまりsum(1)が呼び出されます。
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 2
sum(2)
呼び出し
sum(3)の動作の様子
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 3
sum(3)
呼び出し
sum(1)が呼び出されました。
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 2
sum(2)
呼び出し
sum(1)
呼び出し
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 1
sum(3)の動作の様子
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 3
sum(3)
呼び出し
n == 1 なのでif文の中身は実行されません。
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 2
sum(2)
呼び出し
sum(1)
呼び出し
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 1
sum(3)の動作の様子
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 3
sum(3)
呼び出し
sum(n – 1)つまりsum(0)が呼び出されます。
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 2
sum(2)
呼び出し
sum(1)
呼び出し
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 1
sum(3)の動作の様子
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 3
sum(3)
呼び出し
sum(0)が呼び出されました。
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 2
sum(2)
呼び出し
sum(1)
呼び出し
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 1
sum(0)
呼び出し
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 0
sum(3)の動作の様子
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 3
sum(3)
呼び出し
n == 0 なのでif文の中身が実行されます。
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 2
sum(2)
呼び出し
sum(1)
呼び出し
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 1
sum(0)
呼び出し
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 0
sum(3)の動作の様子
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 3
sum(3)
呼び出し
0を返して関数の実行を終了します。
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 2
sum(2)
呼び出し
sum(1)
呼び出し
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 1
sum(0)
呼び出し
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 0
sum(3)の動作の様子
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 3
sum(3)
呼び出し
s = 0となります。
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 2
sum(2)
呼び出し
sum(1)
呼び出し
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 1
s = 0
sum(0)
呼び出し返り値: 0
sum(3)の動作の様子
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 3
sum(3)
呼び出し
s + n == 1なので1を返して関数の実行を終了します。
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 2
sum(2)
呼び出し
sum(1)
呼び出し
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 1
s = 0
sum(0)
呼び出し返り値: 0
sum(3)の動作の様子
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 3
sum(3)
呼び出し
s = 1となります。
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 2
s = 1
sum(2)
呼び出し
sum(1)
呼び出し
sum(0)
呼び出し返り値: 0
返り値: 1
sum(3)の動作の様子
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 3
sum(3)
呼び出し
s + n == 3なので3を返して関数の実行を終了します。
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 2
s = 1
sum(2)
呼び出し
sum(1)
呼び出し
sum(0)
呼び出し返り値: 0
返り値: 1
sum(3)の動作の様子
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 3
s = 3 sum(3)
呼び出し
s = 3となります。
sum(2)
呼び出し
sum(1)
呼び出し
sum(0)
呼び出し返り値: 0
返り値: 1
返り値: 3
sum(3)の動作の様子
1.int sum(int n) {
2. if (n == 0) {
3. return 0;
4. }
5. int s = sum(n - 1);
6. return s + n;
7.}
n = 3
s = 3 sum(3)
呼び出し
s + n == 6なので6を返して関数の実行を終了します。
sum(2)
呼び出し
sum(1)
呼び出し
sum(0)
呼び出し返り値: 0
返り値: 1
返り値: 3
sum(3)の動作の様子
sum(3)
呼び出し
sum(3) == 6 となりました。
sum(2)
呼び出し
sum(1)
呼び出し
sum(0)
呼び出し返り値: 0
返り値: 1
返り値: 3
返り値: 6

Contenu connexe

Tendances

C++でHello worldを書いてみた
C++でHello worldを書いてみたC++でHello worldを書いてみた
C++でHello worldを書いてみたfirewood
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competitionyak1ex
 
第12回計算機構成
第12回計算機構成第12回計算機構成
第12回計算機構成眞樹 冨澤
 
プロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswiftプロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswiftTomohiro Kumagai
 
みんな大好き! Hello, World
みんな大好き! Hello, Worldみんな大好き! Hello, World
みんな大好き! Hello, WorldNaohiro Aota
 
第10回 計算機構成
第10回 計算機構成第10回 計算機構成
第10回 計算機構成眞樹 冨澤
 
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswiftSwift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswiftTomohiro Kumagai
 
ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体digitalghost
 
Protocol-Oriented Integers に想うジェネリックプログラミングの未来
Protocol-Oriented Integers に想うジェネリックプログラミングの未来Protocol-Oriented Integers に想うジェネリックプログラミングの未来
Protocol-Oriented Integers に想うジェネリックプログラミングの未来Tomohiro Kumagai
 
イニシャライザー Part 2.5 #hakataswift
イニシャライザー Part 2.5 #hakataswiftイニシャライザー Part 2.5 #hakataswift
イニシャライザー Part 2.5 #hakataswiftTomohiro Kumagai
 
新しくプログラミング言語・・・Rubyでやってみた
新しくプログラミング言語・・・Rubyでやってみた新しくプログラミング言語・・・Rubyでやってみた
新しくプログラミング言語・・・RubyでやってみたTomoaki Ueda
 
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorpSwift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorpTomohiro Kumagai
 
How to make Inn-fighting dice
How to make Inn-fighting diceHow to make Inn-fighting dice
How to make Inn-fighting diceMasujima Ryohei
 
F#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミングF#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミングsatoshimurakumo
 
AVAの話 #mentaicojs
AVAの話 #mentaicojsAVAの話 #mentaicojs
AVAの話 #mentaicojsHiroyuki Anai
 

Tendances (20)

C++でHello worldを書いてみた
C++でHello worldを書いてみたC++でHello worldを書いてみた
C++でHello worldを書いてみた
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
 
第12回計算機構成
第12回計算機構成第12回計算機構成
第12回計算機構成
 
プロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswiftプロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswift
 
みんな大好き! Hello, World
みんな大好き! Hello, Worldみんな大好き! Hello, World
みんな大好き! Hello, World
 
業務報告会
業務報告会業務報告会
業務報告会
 
第10回 計算機構成
第10回 計算機構成第10回 計算機構成
第10回 計算機構成
 
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswiftSwift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
 
ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体
 
Protocol-Oriented Integers に想うジェネリックプログラミングの未来
Protocol-Oriented Integers に想うジェネリックプログラミングの未来Protocol-Oriented Integers に想うジェネリックプログラミングの未来
Protocol-Oriented Integers に想うジェネリックプログラミングの未来
 
C#6.0の新機能紹介
C#6.0の新機能紹介C#6.0の新機能紹介
C#6.0の新機能紹介
 
関数
関数関数
関数
 
イニシャライザー Part 2.5 #hakataswift
イニシャライザー Part 2.5 #hakataswiftイニシャライザー Part 2.5 #hakataswift
イニシャライザー Part 2.5 #hakataswift
 
新しくプログラミング言語・・・Rubyでやってみた
新しくプログラミング言語・・・Rubyでやってみた新しくプログラミング言語・・・Rubyでやってみた
新しくプログラミング言語・・・Rubyでやってみた
 
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorpSwift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
 
How to make Inn-fighting dice
How to make Inn-fighting diceHow to make Inn-fighting dice
How to make Inn-fighting dice
 
Emcjp item21
Emcjp item21Emcjp item21
Emcjp item21
 
F#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミングF#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミング
 
Mock and patch
Mock and patchMock and patch
Mock and patch
 
AVAの話 #mentaicojs
AVAの話 #mentaicojsAVAの話 #mentaicojs
AVAの話 #mentaicojs
 

Apg4b 2.05.再帰 sum関数の動作説明

  • 1. sum(3)の動作の様子 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} sum(3) 呼び出し n = 3でsum関数が呼び出されました。 n = 3
  • 2. sum(3)の動作の様子 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 3 sum(3) 呼び出し n == 3 なのでif文の中身は実行されません。
  • 3. sum(3)の動作の様子 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 3 sum(3) 呼び出し sum(n – 1)つまりsum(2)が呼び出されます。
  • 4. sum(3)の動作の様子 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 3 sum(3) 呼び出し sum(2)が呼び出されました。 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 2 sum(2) 呼び出し
  • 5. sum(3)の動作の様子 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 3 sum(3) 呼び出し n == 2 なのでif文の中身は実行されません。 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 2 sum(2) 呼び出し
  • 6. sum(3)の動作の様子 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 3 sum(3) 呼び出し sum(n – 1)つまりsum(1)が呼び出されます。 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 2 sum(2) 呼び出し
  • 7. sum(3)の動作の様子 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 3 sum(3) 呼び出し sum(1)が呼び出されました。 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 2 sum(2) 呼び出し sum(1) 呼び出し 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 1
  • 8. sum(3)の動作の様子 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 3 sum(3) 呼び出し n == 1 なのでif文の中身は実行されません。 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 2 sum(2) 呼び出し sum(1) 呼び出し 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 1
  • 9. sum(3)の動作の様子 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 3 sum(3) 呼び出し sum(n – 1)つまりsum(0)が呼び出されます。 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 2 sum(2) 呼び出し sum(1) 呼び出し 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 1
  • 10. sum(3)の動作の様子 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 3 sum(3) 呼び出し sum(0)が呼び出されました。 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 2 sum(2) 呼び出し sum(1) 呼び出し 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 1 sum(0) 呼び出し 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 0
  • 11. sum(3)の動作の様子 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 3 sum(3) 呼び出し n == 0 なのでif文の中身が実行されます。 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 2 sum(2) 呼び出し sum(1) 呼び出し 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 1 sum(0) 呼び出し 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 0
  • 12. sum(3)の動作の様子 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 3 sum(3) 呼び出し 0を返して関数の実行を終了します。 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 2 sum(2) 呼び出し sum(1) 呼び出し 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 1 sum(0) 呼び出し 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 0
  • 13. sum(3)の動作の様子 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 3 sum(3) 呼び出し s = 0となります。 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 2 sum(2) 呼び出し sum(1) 呼び出し 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 1 s = 0 sum(0) 呼び出し返り値: 0
  • 14. sum(3)の動作の様子 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 3 sum(3) 呼び出し s + n == 1なので1を返して関数の実行を終了します。 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 2 sum(2) 呼び出し sum(1) 呼び出し 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 1 s = 0 sum(0) 呼び出し返り値: 0
  • 15. sum(3)の動作の様子 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 3 sum(3) 呼び出し s = 1となります。 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 2 s = 1 sum(2) 呼び出し sum(1) 呼び出し sum(0) 呼び出し返り値: 0 返り値: 1
  • 16. sum(3)の動作の様子 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 3 sum(3) 呼び出し s + n == 3なので3を返して関数の実行を終了します。 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 2 s = 1 sum(2) 呼び出し sum(1) 呼び出し sum(0) 呼び出し返り値: 0 返り値: 1
  • 17. sum(3)の動作の様子 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 3 s = 3 sum(3) 呼び出し s = 3となります。 sum(2) 呼び出し sum(1) 呼び出し sum(0) 呼び出し返り値: 0 返り値: 1 返り値: 3
  • 18. sum(3)の動作の様子 1.int sum(int n) { 2. if (n == 0) { 3. return 0; 4. } 5. int s = sum(n - 1); 6. return s + n; 7.} n = 3 s = 3 sum(3) 呼び出し s + n == 6なので6を返して関数の実行を終了します。 sum(2) 呼び出し sum(1) 呼び出し sum(0) 呼び出し返り値: 0 返り値: 1 返り値: 3
  • 19. sum(3)の動作の様子 sum(3) 呼び出し sum(3) == 6 となりました。 sum(2) 呼び出し sum(1) 呼び出し sum(0) 呼び出し返り値: 0 返り値: 1 返り値: 3 返り値: 6