37 lines
744 B
Plaintext
37 lines
744 B
Plaintext
/* ===== 模块6:函数 =====
|
||
* test18_recursion — 递归函数
|
||
* 难度:3/5
|
||
* 验证点:递归调用、多路递归、递归终止条件
|
||
*/
|
||
fn fib(n: i32) i32 {
|
||
if n <= 1 { ret n; }
|
||
ret fib(n - 1) + fib(n - 2);
|
||
}
|
||
|
||
fn fact(n: i32) i32 {
|
||
if n <= 0 { ret 1; }
|
||
ret n * fact(n - 1);
|
||
}
|
||
|
||
fn main() i32 {
|
||
/* 斐波那契 */
|
||
var f0 := fib(0);
|
||
if f0 != 0 { ret 1; }
|
||
var f1 := fib(1);
|
||
if f1 != 1 { ret 2; }
|
||
var f5 := fib(5);
|
||
if f5 != 5 { ret 3; }
|
||
var f10 := fib(10);
|
||
if f10 != 55 { ret 4; }
|
||
|
||
/* 阶乘 */
|
||
var fact0 := fact(0);
|
||
if fact0 != 1 { ret 5; }
|
||
var fact3 := fact(3);
|
||
if fact3 != 6 { ret 6; }
|
||
var fact5 := fact(5);
|
||
if fact5 != 120 { ret 7; }
|
||
|
||
ret 0;
|
||
}
|