本文分析一個PHP遞歸函數的示例,解釋其輸出結果與預期不符的原因。代碼如下:
該函數sd()接受兩個參數a和b,默認值分別為3和2。函數計算a和b的和,賦值給c。如果c小于6,則遞歸調用自身,并將a和新的c值作為參數傳遞。最后,函數打印c的值。
執行sd()后,輸出結果為“85”,而非預期的“8”。這是因為對遞歸調用和echo語句執行順序的理解存在偏差。
立即學習“PHP免費學習筆記(深入)”;
程序執行流程如下:
- 初次調用sd(),a=3, b=2, c = 3 + 2 = 5。由于c
- 遞歸調用中,a=3, b=5, c = 3 + 5 = 8。此時c >= 6,遞歸結束。echo $c; 打印8。
- 程序返回到第一次調用sd()的位置。echo $c; 打印第一次調用時的c值,也就是5。
因此,最終輸出為“85”。并非變量c未被覆蓋,而是echo語句位于函數末尾,每次遞歸結束都會執行,導致兩次打印。
要得到結果“8”,需修改函數邏輯,例如將echo語句放在if條件語句內,或僅在遞歸結束時打印最終結果。 修改后的代碼可以如下:
<?php function sd($a=3,$b=2){ $c = $a + $b; if($c < 6){ return sd($a,$c); } return $c; } echo sd(); ?>
這個修改后的版本使用return語句返回c的值,確保只在遞歸結束后打印最終結果。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END
喜歡就支持一下吧
相關推薦