190 likes | 380 Views
迴圈、遞迴. 迴圈:. 迴圈主要就是 for loop 和 while 現在就讓我們來複習一下吧!. For loop :. For loop 的格式為→. for( 起始點 ; 範圍 ; 條件運算 ). 範例: 請印出 0~10 for(int i = 0; i < 11; i++) { cout<< i <<“ ”; }. 除了印出 0~10 以外, FOR LOOP 還有其他小練習:. 印出小於 1000 的 2 的 n 次方: for(int i=1;i<1000;i=2*i) {
E N D
迴圈: 迴圈主要就是for loop和while 現在就讓我們來複習一下吧!
For loop: For loop的格式為→ for( 起始點; 範圍; 條件運算) 範例: 請印出0~10 for(int i = 0; i < 11; i++) { cout<< i <<“ ”; }
除了印出0~10以外,FORLOOP還有其他小練習: • 印出小於1000的2的n次方: • for(int i=1;i<1000;i=2*i) • { • cout<<i<<endl; • } b. 利用兩個forloop印出矩陣: int a[3][3]={0,1,2,3,4,5,6,7,8}; for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { cout<<a[i][j]<<" "; } cout<<endl; }
在C++裡面~ 嘿嘿!小提醒! 變數宣告可以在for的括號裡面,也可以在外面唷! FOR LOOP可是個小小的大功臣唷! 彷彿就像大機器人中的一個小螺絲
WHILE: while的格式為→ While(判斷式) { 迴圈內容 } 範例: 請印出0~10
While的其他小練習: a.請讓使用者輸入數字,並將這些數字相加起來 inti= 1,keyIn,number,total = 0; cout<<"請輸入你想輸入的數字有幾個"<<endl; cin>>keyIn; while(i<=keyIn) { cout<<"請輸入第"<<i<<"個數字:"; cin>>number; total = total + number; i++; } cout<<"您輸入的數字總和"<<total<<endl;
替你介紹迴圈的好朋友們: 和 Continue break Break只跳出一層迴圈
另外!寫迴圈該注意哪些事呢? int a[3]={0,1,2}; for(int i=0 ;i<=4;i++){cout<<a[i]<<" "}; for(int i=0 ;i<=4;i++){ } // name lookup of `i' changed for new ISO `for‘ scoping, cout<<i;//`i' undeclared (first use this function) for(int i= 0; ;i++ ){ } //沒有設終止條件 for(int i= 0; i<=5; i--){ } //i會一直往下跑
看了這麼多,我們要來下個小結論給迴圈囉! 事實上,forloop和while就像一個媽媽生的雙胞胎一樣, 大部分的人寫迴圈時,最容易犯上一頁說的三個錯誤,所以,上頁那三個注意事項一定要好好記著,這樣,錯誤發生的機率就會減低很多囉! 另外,有時候一口氣寫了好多層迴圈,那麼,括號的對應就變得很重要囉!不要忘了!所有大括號都不要省略!雖然是一個小小的習慣,但是,這可是會影響你之後底霸個或是別人看你的程式的一個大便利唷!
接著下來‧‧‧ 我們就要開始講 RECURSIVE
RECURSIVE: 所謂recursive,就是”function在自己裡面呼叫自己”, 這個結構就叫做recursive。 假設K= 5,則… void f1(5){ if( 5 != 0 ){ cout << 5; f1( 5-1 ); } } void f1(4){ if( 4 != 0 ){ cout << 4; f1( 4-1 ); } } void f1(3){ if( k != 0 ){ cout << k; f1( 3-1 ); } } ………
好像不太好懂。。。 換個方式想想: 如果把函式內呼叫自己的函式看成是另一個函式 ,但是功能一樣,這樣會比較好懂一點。 f1 == f2 == f3 == f4 … void f1( int k ){ if( k != 0 ){ cout << k; f2( k-1 ); } } void f2( int k ){ if( k != 0 ){ cout << k; f3( k-1 ); } } void f3( int k ){ if( k != 0 ){ cout << k; f4( k-1 ); } } ………
簡單的遞迴範例 (仔細看程式到底是怎麼跑的) : if( 3 > 0 ){ } 當 n = 3 時 void number( int n){ if( n>0 ){ cout << n << " "; number(n-1); cout << n << " "; } } cout << 3 << “ “; if( 2 > 0 ){ } cout << 2 << “ “; if( 1 > 0 ){ } cout << 1 << “ “; if( 0 > 0 ){ } 3 2 1 1 2 3 請按任意鍵繼續 . . . 3 2 1 1 2 3 請按任意鍵繼續 . . . cout << 1 << “ “; cout << 2 << “ “; cout << 3 << “ “;
基本遞迴1-費式數列 : F(n) = F(n-1)+F(n-2), F(1) = F(2) = 1 以n=5來舉例: F(5)= 5 3 F(4)= F(3)= 2 2 F(3)= F(2)= 1 F(2)= 1 F(1)= 1 F(2)= 1 F(1)= 1
基本遞迴2-gcd(最大公因數) : intgcd( int small, int big ){ if( big % small == 0 ){ return small } else{ int temp = small; small = big%small; big = temp; returngcd(small,big); } } gcd(1089,2057) = 121 return gcd(968,1089) = 121 return gcd(121,968) = 121
天那。。。 我覺得遞迴好難唷!我到底該在什麼時候用它呢? 事實上,遞迴並不會很難,因為結果出來以前,他都是重複的呼叫自己的,感覺就像是洋蔥一樣,一層一層的往內探索,而且,隨著年紀跟經驗的增長,你會發現很多函式都會用到遞迴,久而久之,它就像是你的好鄰居了。 所以,我們要跟好鄰居打好關係,這樣有困難才能尋求他們幫忙啊!不用擔心鄰居的名字叫做“遞迴”就害怕他,我們只要確定,最後可以因為鄰居而得到我們需要的解答,這樣就可以了! 最後‧‧‧ 我們就來好好練習一下剛剛所學的吧!
基本題 : (迴圈) c013488 Triangle Wave d712 100 The 3n + 1problem (遞迴) c002 10696F91 d672 10922 2 the 9s 進階題: c015 10018 Reverse and Add c014 10035 PrimaryArithmetic