说:1.编写程序,使用记忆法递归编写计算斐波那契数列的算法,使用1=100进行验证。 2.编写程序,利用递归,求八皇后问题。c语言实现
时间: 2024-09-27 17:14:35 浏览: 35
算法与程序设计:第2章 分治法.ppt
1. 编写计算斐波那契数列的递归算法,你可以参考下面这个简单的C语言代码示例:
```c
#include <stdio.h>
int fibonacci(int n) {
if (n <= 1)
return n;
else
return fibonacci(n - 1) + fibonacci(n - 2);
}
int main() {
int n = 100; // 验证用的大数,比如这里取100作为例子
printf("Fibonacci of %d is: %d\n", n, fibonacci(n));
return 0;
}
```
当你运行这个程序,它会递归地计算第100个斐波那契数并打印结果。
2. 八皇后问题是一个经典的回溯算法案例,下面是C语言的一个简单实现:
```c
#include <stdio.h>
#define N 8
// 检查皇后是否可以放置在行i、列col上
int is_safe(int row[N], int col[], int i, int n) {
// 对于当前行i,检查是否有其他列放置了皇后
for (int j = 0; j < i; j++) {
if (col[j] == i || // 列冲突
row[i] - j || // 主对角线冲突
row[i] + row[j] == i + j) { // 反主对角线冲突
return 0;
}
}
return 1;
}
// 递归解决八皇后问题
void solveNQueens(int row[N], int col[N], int n) {
if (row[n - 1] == -1) { // 如果所有位置都已填满,表示找到解
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", col[j]);
}
printf("\n");
}
printf("---\n");
} else {
for (int i = 0; i < n; i++) { // 尝试在每一行放置皇后
if (is_safe(row, col, n - 1, n)) {
row[n - 1] = i; // 放置皇后
col[i] = n - 1; // 更新列坐标
solveNQueens(row, col, n - 1); // 继续下一行
row[n -1; // 清理列坐标
}
}
}
}
int main() {
int row[N] = {-1};
int col[N] = {-1};
solveNQueens(row, col, 0);
return 0;
}
```
运行这个程序,它会尝试找到所有可能的八皇后棋局解决方案,并在每一步之后打印出来。
阅读全文