楊輝三角
楊輝三角形這一題型,屬於分治法,如果我們使用遞迴來處理,可以解決但是時間複雜度太高,為\(O(2^n)\),會超時錯誤,所以應該用遞推法,一行一行的把值儲存下來,減少大量的重複計算,這樣時間複雜度為\(O(n)\),還不錯。
當然解題思路,無論是遞迴還是遞推,都是一樣的,總結遞迴公式、及遞迴出口(可能不止一個)。
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 30 + 5;
struct Triangle {
int arr[MAXN][MAXN];
int row, col;
};
Triangle answer;
//遞推法求楊輝三角形
void yang_triangle(int n) {
for(int i = 1; i <= n; ++i) {
for(int j = 0; j < i; ++j) {
if(j == 0 || j == i - 1) {
answer.arr[i-1][j] = 1;
} else {
answer.arr[i-1][j] = answer.arr[i-2][j-1] + answer.arr[i-2][j];
}
}
}
}
int main()
{
int n;
while(cin >> n) {
yang_triangle(n);
//output
for(int i = 1; i <= n; ++i) {
for(int j = 0; j < i; ++j) {
if(j == 0) {
cout << answer.arr[i-1][j];
} else {
cout << " " << answer.arr[i-1][j];
}
}
cout << endl;
}
cout << endl;
}
return 0;
}