1 / 19

迴圈、遞迴

迴圈、遞迴. 迴圈:. 迴圈主要就是 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) {

manchu
Download Presentation

迴圈、遞迴

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 迴圈、遞迴

  2. 迴圈: 迴圈主要就是for loop和while 現在就讓我們來複習一下吧!

  3. For loop: For loop的格式為→ for( 起始點; 範圍; 條件運算) 範例: 請印出0~10 for(int i = 0; i < 11; i++) { cout<< i <<“ ”; }

  4. 除了印出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; }

  5. 在C++裡面~ 嘿嘿!小提醒! 變數宣告可以在for的括號裡面,也可以在外面唷! FOR LOOP可是個小小的大功臣唷! 彷彿就像大機器人中的一個小螺絲

  6. WHILE: while的格式為→ While(判斷式) { 迴圈內容 } 範例: 請印出0~10

  7. 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;

  8. 替你介紹迴圈的好朋友們: 和 Continue break Break只跳出一層迴圈

  9. 另外!寫迴圈該注意哪些事呢? 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會一直往下跑

  10. 看了這麼多,我們要來下個小結論給迴圈囉!   事實上,forloop和while就像一個媽媽生的雙胞胎一樣, 大部分的人寫迴圈時,最容易犯上一頁說的三個錯誤,所以,上頁那三個注意事項一定要好好記著,這樣,錯誤發生的機率就會減低很多囉!   另外,有時候一口氣寫了好多層迴圈,那麼,括號的對應就變得很重要囉!不要忘了!所有大括號都不要省略!雖然是一個小小的習慣,但是,這可是會影響你之後底霸個或是別人看你的程式的一個大便利唷!

  11. 接著下來‧‧‧ 我們就要開始講 RECURSIVE

  12. 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 ); } } ………

  13. 好像不太好懂。。。 換個方式想想: 如果把函式內呼叫自己的函式看成是另一個函式 ,但是功能一樣,這樣會比較好懂一點。 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 ); } } ………

  14. 不要忘記!

  15. 簡單的遞迴範例 (仔細看程式到底是怎麼跑的) : 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 << “ “;

  16. 基本遞迴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

  17. 基本遞迴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

  18. 天那。。。 我覺得遞迴好難唷!我到底該在什麼時候用它呢? 事實上,遞迴並不會很難,因為結果出來以前,他都是重複的呼叫自己的,感覺就像是洋蔥一樣,一層一層的往內探索,而且,隨著年紀跟經驗的增長,你會發現很多函式都會用到遞迴,久而久之,它就像是你的好鄰居了。   所以,我們要跟好鄰居打好關係,這樣有困難才能尋求他們幫忙啊!不用擔心鄰居的名字叫做“遞迴”就害怕他,我們只要確定,最後可以因為鄰居而得到我們需要的解答,這樣就可以了! 最後‧‧‧ 我們就來好好練習一下剛剛所學的吧!

  19. 基本題 : (迴圈) c013488 Triangle Wave d712 100 The 3n + 1problem (遞迴) c002 10696F91 d672 10922 2 the 9s 進階題: c015 10018 Reverse and Add c014 10035 PrimaryArithmetic

More Related