求的是斐波那契數列的和=》1 + 2 + 3 + 5 + 8 + 13 + .... + n算法
int recursiveFbi(int n) { if (n == 1 || n == 2) { return n; } else { return recursiveFbi(n - 1) + recursiveFbi(n - 2); } } 複製代碼
int Fbi(int n) { int *a = (int*)malloc(sizeof(int) * n); a[0] = 1; a[1] = 2; for (int i = 2; i < n; i++) { a[i] = a[i-1] + a[i-2]; } int ret = a[n-1]; free(a); return ret; } 複製代碼
當我動態規劃寫完,發現空間還能夠再優化一下markdown
int Fbi2(int n) { int a1 = 1; int a2 = 2; int a3 = 0; for (int i = 2; i < n; i++) { a3 = a2 + a1; a1 = a2; a2 = a3; } int ret = a3; return ret; } 複製代碼
int main(int argc, const char * argv[]) { // insert code here... printf("Hello, Fbi!\n"); int n = 10; printf("遞歸:%d層樓梯有%d種方法\n", n , recursiveFbi(n)); printf("動態規劃:%d層樓梯有%d種方法\n", n , Fbi(n)); printf("動態規劃-空間優化:%d層樓梯有%d種方法\n", n , Fbi2(n)); return 0; } 複製代碼
算法題-楊輝三角post