diff --git a/codes/dart/chapter_computational_complexity/iteration.dart b/codes/dart/chapter_computational_complexity/iteration.dart new file mode 100644 index 00000000..3bcdc9e1 --- /dev/null +++ b/codes/dart/chapter_computational_complexity/iteration.dart @@ -0,0 +1,72 @@ +/** + * File: iteration.dart + * Created Time: 2023-08-27 + * Author: liuyuxin (gvenusleo@gmail.com) + */ + +/* for 循环 */ +int forLoop(int n) { + int res = 0; + // 循环求和 1, 2, ..., n-1, n + for (int i = 1; i <= n; i++) { + res += i; + } + return res; +} + +/* while 循环 */ +int whileLoop(int n) { + int res = 0; + int i = 1; // 初始化条件变量 + // 循环求和 1, 2, ..., n-1, n + while (i <= n) { + res += i; + i++; // 更新条件变量 + } + return res; +} + +/* while 循环(两次更新) */ +int whileLoopII(int n) { + int res = 0; + int i = 1; // 初始化条件变量 + // 循环求和 1, 4, ... + while (i <= n) { + res += i; + // 更新条件变量 + i++; + i *= 2; + } + return res; +} + +/* 双层 for 循环 */ +String nestedForLoop(int n) { + String res = ""; + // 循环 i = 1, 2, ..., n-1, n + for (int i = 1; i <= n; i++) { + // 循环 j = 1, 2, ..., n-1, n + for (int j = 1; j <= n; j++) { + res += "($i, $j), "; + } + } + return res; +} + +/* Driver Code */ +void main() { + int n = 5; + int res; + + res = forLoop(n); + print("\nfor 循环的求和结果 res = $res"); + + res = whileLoop(n); + print("\nwhile 循环的求和结果 res = $res"); + + res = whileLoopII(n); + print("\nwhile 循环(两次更新)的求和结果 res = $res"); + + String resStr = nestedForLoop(n); + print("\n双层 for 循环的结果 $resStr"); +} diff --git a/codes/dart/chapter_computational_complexity/recursion.dart b/codes/dart/chapter_computational_complexity/recursion.dart new file mode 100644 index 00000000..de33e72b --- /dev/null +++ b/codes/dart/chapter_computational_complexity/recursion.dart @@ -0,0 +1,48 @@ +/** + * File: recursion.dart + * Created Time: 2023-08-27 + * Author: liuyuxin (gvenusleo@gmail.com) + */ + +/* 递归 */ +int recur(int n) { + // 终止条件 + if (n == 1) return 1; + // 递:递归调用 + int res = recur(n - 1); + // 归:返回结果 + return n + res; +} + +/* 尾递归 */ +int tailRecur(int n, int res) { + // 终止条件 + if (n == 0) return res; + // 尾递归调用 + return tailRecur(n - 1, res + n); +} + +/* 斐波那契数列:递归 */ +int fib(int n) { + // 终止条件 f(1) = 0, f(2) = 1 + if (n == 1 || n == 2) return n - 1; + // 递归调用 f(n) = f(n-1) + f(n-2) + int res = fib(n - 1) + fib(n - 2); + // 返回结果 f(n) + return res; +} + +/* Driver Code */ +void main() { + int n = 5; + int res; + + res = recur(n); + print("\n递归函数的求和结果 res = $res"); + + res = tailRecur(n, 0); + print("\n尾递归函数的求和结果 res = $res"); + + res = fib(n); + print("\n斐波那契数列的第 $n 项为 $res"); +}