函數(一) 自訂函數、遞迴函數 2008.10. 綠園.

Slides:



Advertisements
Similar presentations
1 第 3 章 C++ 中的条件与循环 第 3 次见面! acm.nefu.edu.cn/C++_03.ppt.
Advertisements

While 迴圈 - 不知重複執行次數
C++语言程序设计教程 第5章 构造数据类型 第6章 C++程序的结构.
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
第 2 章 初探 C++.
第4章 数组 数组是由一定数目的同类元素顺序排列而成的结构类型数据 一个数组在内存占有一片连续的存储区域 数组名是存储空间的首地址
Chapter 4 歸納(Induction)與遞迴(Recursion)
資料大樓 --談指標與陣列 綠園.
第4章 函数与预处理 4.1 概述 4.2 定义函数的一般形式 4.3 函数参数和函数的值 4.4 函数的调用 *4.5 内置函数
教材 《C++程序设计》.谭浩强. 清华大学出版社 王雪晶
Chap 10 函数与程序结构 10.1 函数的组织 10.2 递归函数 10.3 宏定义 10.4 编译预处理.
If … else 選擇結構 P27.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第一章 程序的基本结构. 第一章 程序的基本结构 教材及授课结构 本章目标 基本内容 扩展阅读 上机指导 应用举例 习题.
第七章 函数 目录 有参的加法函数的开发 函数定义的一般形式 函数参数和函数的值 函数的调用
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
Object-Oriented Programming in C++ 第一章 C++的初步知识
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
程式撰寫流程.
计算机网络讲义 第5章 批量数据处理—数组 一维数组 排序和查找 二维数组 字符串.
6 使用者函數 6.1 函數定義 宣告函數 呼叫函數 呼叫多個函數 6-6
第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析.
C++程序设计 string(字符串类) vector(容器类).
C++语言程序设计 第二章 C++简单程序设计.
程序的三种基本结构 if条件分支语句 switch多路开关语句 循环语句 循环嵌套 break,continue和goto语句
谭浩强 编著 中国高等院校计算机基础教育课程体系规划教材 C++程序设计.
計數式重複敘述 for 迴圈 P
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C Programming in Action
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
东北林业大学 陈宇 ACM程序设计 东北林业大学 陈宇
第三节 堆及其应用.
六、函数 教学目标: 函数的概念、定义、调用和返回 带自定义函数的程序设计 递推算法 递归思想及算法实现 函数的参数传递方式 C语言程序设计.
C++大学基础教程 第3章 C++控制语句 北京科技大学 信息基础科学系.
第六节 最小生成树.
第五章 递归与广义表 递归的概念 递归过程与递归工作栈 递归与回溯 广义表.
Name1..hour //加班時數 name2..hour //請假時數
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
Chapter 2 & Chapter 3.
C++语言程序设计 C++语言程序设计 第五章 函数 第十一组 C++语言程序设计.
程式結構&語法.
4 條件選擇 4.1 程式基本結構 循序式結構 選擇式結構 重複式結構 4-3
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第一章 程序设计和C语言 主讲人:高晓娟 计算机学院.
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
1.2 C语言程序的结构与书写规则 一、 C语言程序的总体结构
Oop8 function函式.
物件導向程式設計 CH2.
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
C程序设计.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
資料結構與C++程式設計進階 遞迴(Recursion) 講師:林業峻 CSIE, NTU 6/ 17, 2010.
C++程式設計入門 變數與運算子 作者:黃建庭.
參數 實際參數(Actual parameter)與形式參數(Formal parameter)
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
問題解決與流程圖 高慧君 台北市立南港高中 2006年12月22日.
挑戰C++程式語言 ──第9章 函數.
第四章 函数 丘志杰 电子科技大学 计算机学院 软件学院.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
C++语言程序设计 第十章 C++标准模板库 成都信息工程学院计算机系.
遞迴 Recursion.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
《数据结构与算法设计》第一部分 面向对象的C++程序设计基础.
第三章 高级函数特性.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
變數與資料型態  綠園.
資料!你家住哪裏? --談指標 綠園.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

函數(一) 自訂函數、遞迴函數 2008.10. 綠園

什麼是函數? 函數是 C / C++ 語言的基本模組,也就是說所有的 C / C++ 程式碼都是由函數組成的。 其目的就是利用模組化的方式簡化主程式,也可以節省撰寫相同程式的時間。 每一個 C / C++ 程式至少包括一主函數 main( )。 函數包括-- 系統函數:位於系統函數庫內,使用時須在程式的開頭用 #include <標頭檔> 自定函數:使用時如變數一般,須宣告。

函數的宣告(一) int add (int, int); 有兩個引數傳入 add() 函數,型態均為int,各型態間以逗號分開 傳回值型態是整數 int add (int, int); 函數名稱為add

函數的宣告(二) 函數沒有傳回值 函數不需要有引數傳入 void star (void); 函數名稱為star

練習:試寫一函數void star(void), 當主程式呼叫star()時,螢幕上會顯示出13個星號 ”*************” 。 #include <iostream> using namespace std; void star(void); //宣告star( )函數的型態 int main( ) { star( ); //呼叫star( ) 函數 cout << “歡迎使用c++!\n”; star( ); return 0; } void star(void) //定義star( )函數的內容 cout << “*************\n”; return;

函數的用法 7 9 9 7 9 a b max( a, b ) j i return i or j /* 傳回較大值 */ #include <iostream> using namespace std; int max(int,int); /* 宣告函數max() */ int main(void) { int a,b; cout << "First number:"; /*輸入兩個整數*/ cin >> a; cout << "Second number:"; cin >> b; cout << "The larger number is " << max(a,b) << endl; /*印出較大值*/ return 0; } int max(int i,int j)/* 自訂函數max(),傳回較大值 */ if (i>j) return i; else return j; a b 7 9 max( a, b ) 9 j 7 i 9 return i or j

函數的寫法 int max(int i, int j) /*自訂函數max(),傳回較大值*/ { if (i>j) /* 傳回較大值 */ #include <iostream> using namespace std; int max(int, int); /*宣告函數max()*/ int main(void) { int a,b; cout << "First number:"; /*輸入兩個整數*/ cin >> a; cout << "Second number:"; cin >> b; cout << "The larger number is " << max(a,b) << endl; /*印出較大值*/ return 0; } int max(int i, int j) /*自訂函數max(),傳回較大值*/ { if (i>j) return i; else return j; }

函數的宣告 int max(int, int); /*宣告函數max()*/ /* 傳回較大值 */ #include <iostream> using namespace std; int max(int, int); /*宣告函數max()*/ int main(void) { int a,b; cout << "First number:"; /*輸入兩個整數*/ cin >> a; cout << "Second number:"; cin >> b; cout << "The larger number is " << max(a,b) << endl; /*印出較大值*/ return 0; } int max(int i,int j) /* 自訂函數max(),傳回較大值 */ if (i > j) return i; else return j;

其他範例—求兩數相加 int add(int,int); /* 宣告函數add() */ /* 兩數相加 */ #include <iostream> using namespace std; int add(int,int); /* 宣告函數add() */ int main(void) { int a,b; cout << "First number : "; /* 輸入兩個整數 */ cin >> a; cout << "Second number : "; cin >> b; cout << "The sum of " << a << " and " << b << " is " << add(a,b) << endl; /*印出sum值*/ return 0; } int add(int num1, int num2) /* 自訂函數add(),傳回兩數的和 */ int sum; sum = num1 + num2; return sum; (2) (1) (3)

其他範例—求最大公因數 int gcd(int,int); /* 宣告函數gcd() */ /* 最大公因數 */ #include <iostream> using namespace std; int gcd(int,int); /* 宣告函數gcd() */ int main(void) { int a,b; cout << "First number : "; /* 輸入兩個整數 */ cin >> a; cout << "Second number : "; cin >> b; cout << "The GCD of " << a << " and " << b << " is " << gcd(a,b) <<endl; /*印出gcd值*/ return 0; } int gcd(int i, int j) /* 自訂的函數gcd(),傳回最大公因數 */ int g; while(j!=0) g=i%j; i=j; j=g; return i;

遞迴函數 遞迴:函數呼叫自己的過程,稱為遞迴。(Recursion) 遞迴函數:具備遞迴性質的函數,稱為遞迴函數(Recursive Function)。 典型的範例:費氏數列

費氏數列(Fibonacci) 數列中,任意數為前兩數之和。 即,an = an-1 + an-2 唯 a0 = 1, a1 = 1

試設計一程式,可印出費氏數列至第n項 假設f(x)函數為費氏數列的第x項值。 則數列中的第 n 項寫成函數型態,即為f(n)。 欲求f(n),可寫成 f(n) = f(n-1) + f(n-2) 這是一個遞迴式,必須有Ending 條件, 即 f(1) = 1, f(2) = 1。 程式寫法如下:

#include <iostream> using namespace std; int fib(int); //宣告fib函數的型態 int main(void) //主程式 { int N,i; cout << "N = ? "; cin >> N; for (i=1; i<=N; i++) //循序印出f(1) 到 f(n) cout << fib(i) << endl ; return 0; } int fib(int n) //定義fib(n) { if (n==1 || n==2) //函數的Ending 值設定 return 1; else return (fib(n-1) + fib(n-2)); //函數的一般值設定 } (2) (1) (3)

看f(6)的執行序 F(6) F(5) F(4) F(3) F(2) F(4) F(3) F(3) F(2) F(2) F(1) F(2)

看f(6)的執行序 n if(n==1 || n==2) Return 結果 6 false F(5)+f(4) 8 5 F(4)+f(3) true 1 1 1 true 1 1

練習:試寫一power(a,b)函數,可算出 ab的值。 Hint: ab = a * ab-1  寫成函數形式:   power(a,b) = a * power(a, b-1)  Ending 條件: a0 = 1  所以..  1, when b=0  power(a,b) =   a*power(a,b-1) , when b>1

練習:試以遞迴函數型態,改寫最大公因數程式 Hint.. b, if (a % b == 0) gcd(a,b)= gcd(b, a%b), if (a%b != 0)