Presentation is loading. Please wait.

Presentation is loading. Please wait.

for( 起始條件 ; 判斷式 ; 條件運算 ){ // 迴圈內容 } while( 判斷式 ){ // 迴圈內容 } do{ // 迴圈內容 } while( 判斷式 ) ;

Similar presentations


Presentation on theme: "for( 起始條件 ; 判斷式 ; 條件運算 ){ // 迴圈內容 } while( 判斷式 ){ // 迴圈內容 } do{ // 迴圈內容 } while( 判斷式 ) ;"— Presentation transcript:

1

2

3 for( 起始條件 ; 判斷式 ; 條件運算 ){ // 迴圈內容 } while( 判斷式 ){ // 迴圈內容 } do{ // 迴圈內容 } while( 判斷式 ) ;

4 Example: Please output 0 ~ 9 for( int i = 0; i <10 ; i++){ cout << i << “ ”; } int i = 0; while( i < 10){ cout << i << “ ”; i++; } 0 1 2 3 4 5 6 7 8 9 請按任意鍵繼續... _

5 while & do while int i = 10; while( i < 10){ cout << i << “ ”; i++; } int i = 10; do{ cout << i << “ ”; i++; } while( i < 10); 請按任意鍵繼續... _ 10 請按任意鍵繼續... _

6 起始條件、判斷式、條件運算可以不只一個。 for(int i = 0, j = 1, k = 0; j < 5 || i++ ; j++, k++){ cout<< i << " " << j << " " << k << endl; } 0 1 0 0 2 1 0 3 2 0 4 3 請按任意鍵繼續..._

7 What about for(int i = 0, j = 1, k = 0; j < 5 || ++i ; j++, k++){ cout<< i << " " << j << " " << k << endl; } Infinite loop

8 WHY ?

9 while( true ) while( false ) = while( 1) = while( 0) 若條件為 true 可以省略條件不寫 → while() 若條件為 false 可以省略迴圈不寫 → 留他何用?

10 隨手一個 break 救救無限迴圈

11 for(int i = 0 ; ; i++) { if(i == 10){ break; } cout << i << " "; } 0 1 2 3 4 5 6 7 8 9 請按任意鍵繼續... _ break 會跳出一層迴圈

12 for(int i = 0; i < 10; i++) { if(i % 3 == 0){ continue; } cout << i << " "; } continue 會直接跳到最後面 1 2 4 5 7 8 請按任意鍵繼續... _

13 (condition1 || condition2 && condition3) condition1 is true condition1 is false → condition2 is true → condition3 is true→ true → condition2 is true→ condition3 is false→ false → condition2 is false→ false → true

14 NOTE int array[3] = {0, 1, 2}; for( int i = 0; i <= 3; i++) { cout << array[i] << " "; } 0 1 2 2359208 請按任意鍵繼續... _

15 NOTE for( int i = 0; i <= 3; i++) { cout << i << " "; } cout << i << " "; name lookup of `i' changed for new ISO `for' scoping

16 NOTE Give appropriate condition. Infinite loop would cause Time Limit Exceeded. for( int i = 0; i < 10; i--) { cout << i << " "; }

17 NOTE while( condition 1){ … while( condition 2){ … while( condition 3){ … } … } … } 括號的對應很重要。

18 Recursion

19 遞迴 → 自己呼叫自己 Example: n! int f( int n){ if( n == 1){ return 1; } else return n * f( n-1); } n! = n * ( n - 1) * … * 1 = n * ( n - 1)!

20 int f( 3){ if( 3 == 1){ return 1; } else return 3 * f( 3-1); } When n = 3 : int f( 2){ if( 2 == 1){ return 1; } else return 2 * f( 2-1); } int f( 1){ if( 1 == 1){ return 1; } else return 1 * f( 1- 1); }

21 int f( 3){ if( 3 == 1){ return 1; } else return 3 * f( 3-1); } When n = 3 : int f( 2){ if( 2 == 1){ return 1; } else return 2 * 1; }

22 int f( 3){ if( 3 == 1){ return 1; } else return 3 * 2; } When n = 3 : 注意: 一定要寫終止條件

23 費氏數列 1 1 2 3 5 8 13 … F(1) = 1F(2) = 1F( n) = F( n - 1 ) + F( n - 2) int f( int n ){ if ( n == 1 || n == 2){ return 1; } else{ return f( n - 1 ) + f( n - 2 ); }

24 F(5) F(1) = 1F(2) = 1F( n) = F( n - 1 ) + F( n - 2) F(4)F(3) F(2) F(1) F(2) F(1)11 2 1 3 11 2 5

25 int GCD( int x, int y){ if( x % y != 0){ return GCD( y, x % y); } else{ return y; } 最大公因數 GCD GCD( 187, 209) GCD( 209, 187) GCD( 187, 22) GCD( 22, 11) int GCD( 187, 209){ if( 187 % 209 != 0){ return GCD( 209, 187); } else{ return y; } int GCD( 209, 187){ if(209 % 187 != 0){ return GCD( 187, 22); } else{ return y; } int GCD( 187, 22){ if( 187 % 22 != 0){ return GCD( 22, 11); } else{ return y; } int GCD( 22, 11){ if( 22 % 11 != 0){ return GCD( y, x % y); } else{ return 11; } 11

26 int f( n){ if( n == 1){ return 1; } else return n * f( n-1); } for( int i = 1, j = 1; i <= n; i++){ j = j * i; } Recursion Loop

27 Exercise

28 基礎 : 100 The 3n + 1 problem 408 Uniform Generator 488 Triangle Wave 10696 F91 10922 2 the 9s 進階 : 750 8 Queens Chess Problem 785 Grid Colouring 10497 Sweet Child Makes Trouble


Download ppt "for( 起始條件 ; 判斷式 ; 條件運算 ){ // 迴圈內容 } while( 判斷式 ){ // 迴圈內容 } do{ // 迴圈內容 } while( 判斷式 ) ;"

Similar presentations


Ads by Google