123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- ORGANIZATION_BLOCK OB 1
- BEGIN
-
- CALL FC 1 (
- N := 0,
- RET_VAL := MD 0,
- )
- __ASSERT== MD 0, L#1
-
- CALL FC 1 (
- N := 1,
- RET_VAL := MD 0,
- )
- __ASSERT== MD 0, L#1
-
- CALL FC 1 (
- N := 2,
- RET_VAL := MD 0,
- )
- __ASSERT== MD 0, L#2
-
- CALL FC 1 (
- N := 3,
- RET_VAL := MD 0,
- )
- __ASSERT== MD 0, L#6
-
- CALL FC 1 (
- N := 4,
- RET_VAL := MD 0,
- )
- __ASSERT== MD 0, L#24
-
- CALL FC 1 (
- N := 5,
- RET_VAL := MD 0,
- )
- __ASSERT== MD 0, L#120
-
- CALL FC 1 (
- N := 6,
- RET_VAL := MD 0,
- )
- __ASSERT== MD 0, L#720
-
- CALL FC 1 (
- N := 7,
- RET_VAL := MD 0,
- )
- __ASSERT== MD 0, L#5040
-
- CALL FC 1 (
- N := 8,
- RET_VAL := MD 0,
- )
- __ASSERT== MD 0, L#40320
-
- CALL FC 1 (
- N := 9,
- RET_VAL := MD 0,
- )
- __ASSERT== MD 0, L#362880
-
- CALL FC 1 (
- N := 10,
- RET_VAL := MD 0,
- )
- __ASSERT== MD 0, L#3628800
-
- CALL FC 1 (
- N := 11,
- RET_VAL := MD 0,
- )
- __ASSERT== MD 0, L#39916800
-
- CALL FC 1 (
- N := 12,
- RET_VAL := MD 0,
- )
- __ASSERT== MD 0, L#479001600
-
-
- CALL SFC 46 // STOP CPU
- END_ORGANIZATION_BLOCK
- FUNCTION FC 1 : DINT
- TITLE = Calculate the factorial of #N
-
- VAR_INPUT
- N : INT;
- END_VAR
- VAR_TEMP
- N_TMP : INT;
- R_TMP : DINT;
- END_VAR
- BEGIN
- // If #N is 0 or 1, #RET_VAL is 1 and recursion ends.
- L #N
- L 1
- T #RET_VAL
- <=I
- BEB
-
- // Subtract 1 from #N
- -I
- T #N_TMP
-
- // Recurse: Calculate (#N - 1)!
- CALL FC 1 (
- N := #N_TMP,
- RET_VAL := #R_TMP,
- )
-
- // Multiply: (#N - 1)! * #N
- L #R_TMP
- L #N
- *D
- T #RET_VAL
- BE
- END_FUNCTION
|