Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 72 additions & 0 deletions codes/dart/chapter_computational_complexity/iteration.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
/**
* File: iteration.dart
* Created Time: 2023-08-27
* Author: liuyuxin ([email protected])
*/

/* 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");
}
48 changes: 48 additions & 0 deletions codes/dart/chapter_computational_complexity/recursion.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/**
* File: recursion.dart
* Created Time: 2023-08-27
* Author: liuyuxin ([email protected])
*/

/* 递归 */
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");
}