私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
フィボナッチ数列 (通常は F(n) で表されます) をフィボナッチ数列と呼びます。シーケンスは 0 と 1 で始まり、その後に続きます。
の各数値は、前の 2 つの数値の合計です。あれは:
F(0)=0、F(1)=1
F(n)=F(n -1)+ F(n- 2)、n>1、n(0 ≤n≤ 30) の場合、F(n) を計算してください。
この質問を受け取ったら、まず質問の範囲を見てみましょう。30 を超えてはなりません。これは、フィボナッチ数の増加速度が非常に速いためです。
急速に、指数関数的に。そのため、n が大きいと C 言語の 32 ビット整数の範囲を超えてしまいます。これが最も基本的な配信です
演繹問題と再帰式についてはすでに説明しました。必要なのは、ループを使用してこの再帰を実装することだけです。
F[31] 配列を使用し、F[0] と F[1] を初期化し、指定された式に従ってループで計算するだけです。
int febonacci(int n) {
int F[30] = {0,1};
for (int i = 2; i < 30; i++) {
F[i] = F[i - 1] + F[i - 2];
}
return F[29]
}
タボナッチ数列 Tn は次のように定義されます。
T(0) = 0、T(1) = 1、T(2)=1
n>2 の条件下では、T(n)=T(n-1)+T(n-2)+T(n-3) となり、整数 n が与えられるので、n 番目のタボナッチを返してください。
数値 T(n) の値。
フィボナッチ数列をすでに理解している場合、この問題は難しくありませんが、初期化するときに最初の 3 つの数値を初期化する必要があります。
そして、ループの反復計算中に、現在の数値の値は、前の 3 つの数値の値の累積和が必要になります。このような:
int tribonacci(int n) {
int F[30] = {0,1,1};
for (int i = 3; i < 30; i++) {
F[i] = F[i - 1] = F[i - 2] + F[i - 3];
}
return F[29];
}
フィボナッチ数列のような問題は 1 次元配列で解決できる場合がありますが、1 次元では解決できないことがあります。
私たちは問題をより高い次元から見る必要があります。
長さは n(1
ただし、他の文字があってはなりません)、M を隣接させることは禁止されています。このような文字列は何種類ありますか?
長さが n で、「A」で終わる文字列が f[n][0] 種類あり、「C」で終わる文字列が f[n][1] 種類あり、f[n][ があるとします。 1] ''で終わる文字列の種類
f[n][2] 種
フィボナッチ数(通常使用されるF(n)
を表します)形成されたシーケンスはと呼ばれますフィボナッチ数列 。このシーケンスは次のもので構成されます0
そして1
最初は、後続の各数値は前の 2 つの数値の合計になります。
int fib(int n){
if(n == 0){
return 0;
}
else if (n == 1){
return 1;
}
return fib(n - 1) + fib(n - 2);
}
あなたが階段を登っているとします。必要n
階段を登ると建物の最上階に到達できます。
登れるたびに1
または2
一歩。建物の屋上まで登ることができる方法は何通りありますか?
int climbStairs(int n) {
int f[46];
f[0] = 1;
f[1] = 1;
for(int i = 2; i <= n; i++){
f[i] = f[i - 1] + f[i - 2];
}
return f[n];
}
負でないインデックスが与えられた場合rowIndex
、「楊輝三角形」の3番目のポイントに戻ります。rowIndex
わかりました。
int* getRow(int rowIndex, int* returnSize) {
int f[34][34];
for(int i = 0; i <= rowIndex; i++){
for(int j = 0; j <= i; j++){
if(j ==0 || j == i){
f[i][j] = 1;
}
else {
f[i][j] = f[i - 1][j] + f[i - 1][j - 1];
}
}
}
int* ret = (int *)malloc (sizeof(int) * (rowIndex + 1));
for(int j = 0; j <= rowIndex; j++){
ret[j] = f[rowIndex][j];
}
*returnSize = rowIndex + 1;
return ret;
}