用c或cpp来写的递推,如图所示

求问一道,用c或cpp来写的递推

img

目前的思路是,细胞死亡时间固定为5天,也就是用一个变量time记录细胞的存在时间,一个变量count记录总数,一个变量produce记录生成的每一批数量,代表未来n天,如果time>=6时,将对应time-1批数的细胞计数归零,最后返回未来n天的细胞数(每天)
想要代码示例,更好的思路

递推式: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;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632