TODO:因为markdown上传图片的问题,最终版有待调试
引言:
本文主题介绍CPP语法基础,首先简要介绍编程环境的配置;然后重点介绍函数和递归函数的基本原理、重点和编程实践。
//因为我经过自适应测试,有一定基础,所以内容较少。
目录
正文:
1.完成了CPP编程环境的配置:
项目开发神器VsCode配置指南!(含C++、Python、Java环境配置)
尝试使用在线编程工具,并推荐给大家。
//这个软件真的好,不用为配置环境而烦恼了
2.CPP语法基础:因为有一定基础,所以我想着重介绍下函数和编程体
函数
函数可以分为声明、定义与调用几个部分,具体实现方法见下述代码与注释
#include <iostream>
using namespace std;
// 定义函数,参数为数组a和长度len,默认len为1,
int MyMax(int a[], int len = 1) {
int max_num = 0;
for (int i=0; i<len; i++) {
if (a[i] > max_num)
max_num = a[i];
}
return max_num;
}
int main() {
int nums[10] = {3, 2, 1, 1, 2, 3, 3, 2, 1, 0};
int nums2[1] = {3};
// 调用函数
cout << MyMax(nums, 10) << endl;
// 调用函数,len使用默认值1
cout << MyMax(nums2) << endl;
return 0;
}
重点:函数的参数传递
常用的是传值传递和引用传递。
- 传值传递
- 在这种方法中,把参数的实际值赋值给函数的形式参数。在这种情况下,修改函数内的形式参数对实际参数没有影响。
- 引用传递
- 该方法把参数的引用赋值给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。
递归函数:
函数的函数体中又调用了它自己,这就叫做“递归函数”。
递归函数基本要素:
- 递归关系
- 比如计算某个数字的阶乘,我们知道,递归的关系就是:数字n的阶乘 = 数字n * 数字n-1的阶乘。
- 递归的终止条件
- 只知道递归关系是不够的,我们需要有一个递归终止的条件。在计算阶乘这个例子中,递归终止的条件是计算到数字1的阶乘的时候,函数可以直接返回数字1的阶乘就是1。
编程实践:汉诺塔问题
思路:
**总任务:**将 n = 5个盘从A柱移至C柱,以B柱为中转柱
- 子任务1: 将 n - 1 = 4个盘从A柱移至B柱,以C柱为中转柱;
- 子任务2: 将A柱上的大盘移至C柱;
- 子作务3:将n - 1 = 4个盘从B柱移至C柱,以A柱为中转柱。
不难看出,除了柱子不同,子任务3同子任务1所做的工作是一样的,都是把 n - 1 个盘从一个柱移至另一个柱。
代码:
//Project - HanoiTower
#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector<string> steps; //用于存放移盘序列的向量
void hanoi(int n, const char* a, const char* b, const char* c) {
if (n==1)
steps.push_back(string(a) + " --> " + c);
else {
hanoi(n-1, a, c, b);
steps.push_back(string(a) + " --> " + c);
hanoi(n-1, b, a, c);
}
}
int main() {
steps.clear();
hanoi(5,"A","B","C");
cout << "Steps count: " << steps.size() << endl;
cout << "First 3 steps are: " << steps[0] << ", "
<< steps[1] << ", " << steps[2];
return 0;
}
cout << "First 3 steps are: " << steps[0] << ", "
<< steps[1] << ", " << steps[2];
return 0;
}
> 汉诺塔问题
>
> 来自 <https://blog.youkuaiyun.com/hyx1249273846/article/details/103456242>