Try   HackMD

社課額外補充教材:函式與遞迴

如果你覺得社課還算輕鬆,這裡提供你一些額外的補充教材。
這些是我們在備課的時候覺得稍微進階,或是篇幅太多,而沒有放在正式社課的內容。


這邊有目錄,左邊也有,可以跳到自己想看的地方


建議必看的地方:

  • 生命週期

生命週期

函式也有生命週期,始於宣告,終於程式結束

#include<iostream> int main(){ greet(); } void greet(){ std::cout<<"Hello world"; return; }

這樣會出錯,greet必須要在使用前宣告

#include<iostream> void greet(){ std::cout<<"Hello world"; return; } int main(){ greet(); }

如果我不想呢?

要在使用前打上這串

type 函式名稱(type1 name1, type2 name2...);

以上面的例子來說

#include<iostream> void greet(); int main(){ greet(); } void greet(){ std::cout<<"Hello world"; return; }

想想你能用遞迴做到什麼吧

  • greedy
  • bubble sort
  • fast paw
  • ! (我指的是數學的階層)
    • P
    • C
  • 遍歷法
    • 深度優先
    • 廣度優先
  • 回溯法
  • 列舉法

其他題目

輸入說明: 輸入有 m+2 個值 第一個是 n 的初始值,第二個代表後面會有 m 個指令 第三個之後會出現 1~6 的整數,分別代表對 n 執行的動作 1 代表 n +1 2 代表 n -1 3 代表 n *2 4 代表 n /2 5 代表 n 先 +1 再 *2 6 代表 n 先 -1 再 /2 輸出說明: n最後的值
範例輸入: 3 1 1 範例輸出: 4
解答
#include<iostream> using namespace std; int n, m; //n,m是全域變數,在每個函式內都可以用 int add(){ n += 1;} int minu(){ n -= 1;} int multiply(){ n *= 2;} int divide(){ n /= 2;} //plus 和 minus 是保留字 int main() { cin >> n >> m; while(m--) { int l; cin >> l; switch(l){ case 1: add(); break; case 2: minu(); break; case 3: multiply(); break; case 4: divide(); break; case 5: add(); multiply(); break; case 6: minu(); divide(); break; } } cout << n; }