teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

追記

2021/06/23 02:07

投稿

avantgarden
avantgarden

スコア121

title CHANGED
File without changes
body CHANGED
@@ -53,4 +53,40 @@
53
53
  ```
54
54
  の部分が繰り返され、最終的に「5」になった`$i`がreturnされるものと思ってたのですが、実際はどのような動きになっているのでしょうか。
55
55
 
56
- また、再起関数を使って期待通りの「5」を得るには、最初に書いたコードをどのように修正すれば良いでしょうか。
56
+ また、再起関数を使って期待通りの「5」を得るには、最初に書いたコードをどのように修正すれば良いでしょうか。
57
+
58
+
59
+ 【追記】
60
+ https://teratail.com/questions/52947
61
+
62
+ 上記の質問での回答内容を参考に
63
+
64
+ ```ここに言語を入力
65
+ function increm($i) {
66
+ if ($i < 5) {
67
+ $i++;
68
+ return increm($i);
69
+ }
70
+
71
+ return $i;
72
+ }
73
+
74
+ $a = increm(0);
75
+ var_dump($a);
76
+ ```
77
+
78
+ としたところ、期待する`int(5)`が出力されました。
79
+ (if文の`increm($i)`の前に`return`を追加しました)
80
+
81
+ 最初の関数の呼び出しから順にたどると
82
+ ```ここに言語を入力
83
+ increm(0) = increm(1)
84
+ increm(1) = increm(2)
85
+ increm(2) = increm(3)
86
+ increm(3) = increm(4)
87
+ increm(4) = increm(5)
88
+ increm(5) = 5 ←$iがそのまま返る
89
+ ```
90
+ ※「=」は数学のイコールの意味で書いてます
91
+
92
+ となるので結果的に「5」が返る、という理解でいいでしょうか。