递推式:f[i] = f[i - 1] + f[i - 2],其中 f[i] 表示第 i 天的细胞总数。
使用递归方法:
#include <stdio.h>
int countCells(int m, int n) {
if (n == 0 || n == 1) {
return n;
}
if (n <= m) {
return countCells(m, n - 1) + countCells(m, n - 2);
}
return countCells(m, n - 1) + countCells(m, n - 2) - 1;
}
int main() {
int m = 5;
for (int n = 0; n <= 20; n++) {
printf("%d ", countCells(m, n));
}
return 0;
}
使用数组计算并保存:
#include <stdio.h>
int countCells(int m, int n, int f[]) {
if (n == 0 || n == 1) {
return n;
}
if (f[n] > 0) {
return f[n];
}
if (n <= m) {
f[n] = countCells(m, n - 1, f) + countCells(m, n - 2, f);
} else {
f[n] = countCells(m, n - 1, f) + countCells(m, n - 2, f) - 1;
}
return f[n];
}
int main() {
int m = 5;
int f[21] = {0};
for (int n = 0; n <= 20; n++) {
printf("%d ", countCells(m, n, f));
}
return 0;
}
递推式:f[i] = f[i - 1] + f[i - 2],其中 f[i] 表示第 i 天的细胞总数。
使用递归方法:
#include <stdio.h>
int countCells(int m, int n) {
if (n == 0 || n == 1) {
return n;
}
if (n <= m) {
return countCells(m, n - 1) + countCells(m, n - 2);
}
return countCells(m, n - 1) + countCells(m, n - 2) - 1;
}
int main() {
int m = 5;
for (int n = 0; n <= 20; n++) {
printf("%d ", countCells(m, n));
}
return 0;
}
使用数组计算并保存:
#include <stdio.h>
int countCells(int m, int n, int f[]) {
if (n == 0 || n == 1) {
return n;
}
if (f[n] > 0) {
return f[n];
}
if (n <= m) {
f[n] = countCells(m, n - 1, f) + countCells(m, n - 2, f);
} else {
f[n] = countCells(m, n - 1, f) + countCells(m, n - 2, f) - 1;
}
return f[n];
}
int main() {
int m = 5;
int f[21] = {0};
for (int n = 0; n <= 20; n++) {
printf("%d ", countCells(m, n, f));
}
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!