推 kinkipikachu:感謝f大大的指導 好像有點通了^^ 10/30 06:45
※ 引述《kinkipikachu (提琴手的無弦之聲)》之銘言:
: 各位大大好 小弟想要請問一個程式的問題
: 麻煩大大破除我的觀念
: private sub form_activate()
: 'main program
: k=game(5)
: print k
: end sub
: function game(x)
: if (x>1) then
: game=x*game(x-1)
: else
: game=1 '主要是這一行
: end if
: end function
在函數中呼叫自己,這種演算法叫做遞迴
在函數中,與函數同名的變數為函數的傳回值
所以 game = x * game(x - 1) 中
指派運算子(=)的右邊為運算式,左邊為變數(也就是函數傳回值)
右邊運算式的執行結果會指派給左邊變數(函數傳回值)
以game(5)為例
1. x = 5 進入函數#1
2. 判斷 x > 1 為 True
3. 計算 x * game(x - 1) = 5 * game(5 - 1) = 5 * game(4)
4. x = 4 進入函數#2
5. 判斷 x > 1 為 True
6. 計算 x * game(x - 1) = 4 * game(4 - 1) = 4 * game(3)
7. x = 3 進入函數#3
8. 判斷 x > 1 為 True
9. 計算 x * game(x - 1) = 3 * game(3 - 1) = 3 * game(2)
10. x = 2 進入函數#4
11. 判斷 x > 1 為 True
12. 計算 x * game(x - 1) = 2 * game(2 - 1) = 2 * game(1)
13. x = 1 進入函數#5
14. 判斷 x > 1 為 False
15. #5傳回 1
16. #4傳回 2 * 1 = 2
17. #3傳回 3 * 2 = 6
18. #2傳回 4 * 6 = 24
19. #1傳回 5 * 24 = 120
結果就等於 1 * 2 * 3 * 4 * 5 = 120
--
▃▅▇▆▄ ▆▂▃ `
逝去感情如何能留住,半點癡情遺留殊不易,██▅▇▄▃ ▇▃▂" .
█████████▃i ▁▄▇
更多悽悽慘慘的遭遇…………██▆▃ █▅▆▃ˍ▄*
◢ ▂█▄▇▅▂▌.
我不知道,王~八~蛋~~! ▂▆███ █▄▃ 。fumizuki。Check。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.194.223.71