第 3 章 第 2 题 求级数问题 递归法实现
生活随笔
收集整理的這篇文章主要介紹了
第 3 章 第 2 题 求级数问题 递归法实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題分析
輸入:階數 k,級數前 k 項 a1 - ak,常系數 c1 - ck+1,要求到的級數項 m
輸出:1 - m 項級數 a1 -am?
約束:無
思路分析
首先要明白 m 肯定是大于 k 的,不然這題不用解答。
然后要理清這里面存在的遞歸關系,可以假設 k = 3,c1 - c4 為 1-4,那么就有如下的遞歸式:
an = an-1 + 2an-2?+ 3an-3 +4
因此,可以使用遞歸法求出第 k+1 至 第 m 項級數,但要注意的是管理好動態數組以存取求解階段需要用到的各個數據,這也是本題考察的重點。
代碼實現
說明:不使用數組的方法會很復雜,暫不實現這種方法。
1 #include <iostream> 2 3 using namespace std; 4 5 // 計算級數函數 6 int countA( int *a, int *c, int k, int n); 7 8 int main(void) { 9 // 獲取階數,級數前 k 項,前 k+1 項系數并保存。 10 int k; 11 cout << "請輸入階數 k :" << endl; 12 cin >> k; 13 14 int *a = new int[k]; 15 int *c = new int[k+1]; 16 17 cout << "請輸入前 " << k << " 項級數:" << endl; 18 for (int i=0; i<k; i++) 19 cin >> a[i]; 20 cout << "請輸入前 " << k+1 << " 項系數:" << endl; 21 for (int i=0; i<k+1; i++) 22 cin >> c[i]; 23 24 int m; 25 cout << "請輸入要求到的級數項數:" << endl; 26 cin >> m; 27 28 // 打印求解結果 29 int an; 30 cout << endl << "1 - " << m << " 項級數求解如下:" << endl; 31 for (int i=1; i<=m; i++) { 32 an = countA(a, c, k, i); 33 cout << "a" << i << " :" << an << endl; 34 } 35 36 return 0; 37 } 38 39 int countA( int *a, int *c, int k, int n) { 40 // 遞歸終點 41 if (n <= k) 42 return a[n-1]; 43 44 // 遞歸求解 45 int an = 0; 46 for (int i=0; i<k; i++) { 47 an += c[i] * countA(a, c, k, n-i-1); 48 } 49 an += c[k]; 50 51 return an; 52 }小結
1. 本題中的階數 k 可能很長,如果直接按照公式求解則會導致冗長的代碼。本文中的代碼采用動態數組存放相關數據( 可以允許用戶輸入任意長度的 k ),代碼精簡多了。
2. 比起僅計算第 15 項系數的情況,這種一般性的解法反而更簡單。
?
?
轉載于:https://www.cnblogs.com/scut-fm/p/3654425.html
總結
以上是生活随笔為你收集整理的第 3 章 第 2 题 求级数问题 递归法实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shell判断文件是否存在[转]
- 下一篇: jquery 获取checkbox的ch