系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用
目录
前言
在面向过程的结构化程序设计中,函数是模块划分的基本单位,是对处理问题过程中的一种抽象。在面向对象的程序化设计中,函数是对对象功能的抽象。
一、函数的概念
一个C++程序可由一个主函数和若干子函数构成。mian是主函数,主函数是程序执行的开始点。主函数可以调用其他子函数,子函数也可以调用其他函数。
二、函数的定义和使用
1.定义
类型说明符 函数名(形参列表)
{
函数语句
return 返回值类型/无返回值
}
2.函数调用
函数在调用之前需要先声明,函数原型声明格式:
类型说明符 函数名(形参1,形参2...)
函数调用格式:函数名(实参1,实参2,...)
#include <iostream>
using namespace std;
// 判断是否是回文数
bool symm(unsigned n){
unsigned temp = n;
unsigned m = 0;
while (temp>0)
{
m = m*10 +temp%10;
temp /= 10;
}
return m == n;
}
int main(int argc, char const *argv[])
{
for (unsigned m = 11; m < 10000; m++){
if (symm(m) && symm(m*m) && symm(m*m*m))
{
cout << "m="<< m;
cout << " m*m="<< m*m;
cout << " m*m*m="<< m*m*m <<endl;
}
}
return 0;
}
3、递归调用
程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
/*****
* 汉诺塔问题
* 假设有三根针ABC,A针上有n个盘子,上面盘子最小,下面盘子最大,
* 要求:将A针上的盘子移到C针上,且在移动过程中保证大的在下面,小的在上面。
* 解决办法:将A针上的n-1盘子移到B针上
* 把A针上剩下的一个盘子移动C针上
* 将B针上n-1个盘子移到C针上
*/
#include <iostream>
using namespace std;
// 把src针上的最上面的一个盘子移动到dest针上
void move(char, char);
void hanoi(int, char, char, char);
int main(int argc, char const *argv[])
{
int m;
int steps = 0;
cout << "enter the number of diskes: "<< endl;
cin >> m;
cout << "the steps to moving " << m << " diskes:" << endl;
hanoi(m, 'A', 'B', 'C');
return 0;
}
void move(char src, char dest){
// 将一个盘子从一个针上移动到另外一个针上
cout << src <<"-->" << dest <<endl;
}
void hanoi(int n, char src, char medium, char dest){
// 将多个盘子从一个针上移动到另外一个针上,是一个递归问题
if(n == 1) move(src, dest);
else {
hanoi(n - 1, src, dest, medium); // 把src上的n-1个盘子移动到medium
move(src, dest); // 把src剩下的一个盘子移动到dest
hanoi(n - 1, medium, src, dest); // 把medium上的n-1个盘子移动到dest
}
}
总结
介绍了函数的定义、声明、参数和调用等相关概念。其中要注意函数的形参是属于函数内部的变量,只有当函数被调用是内存才会开辟空间。