T1cpp语法基础

TODO:因为markdown上传图片的问题,最终版有待调试

引言:

本文主题介绍CPP语法基础,首先简要介绍编程环境的配置;然后重点介绍函数和递归函数的基本原理、重点和编程实践。

//因为我经过自适应测试,有一定基础,所以内容较少

image-20220415220641223

目录

正文:

1.完成了CPP编程环境的配置:

项目开发神器VsCode配置指南!(含C++、Python、Java环境配置)

来自 https://mp.weixin.qq.com/s/aBVU7-SvJe2u7E0eKSmnNQ

尝试使用在线编程工具,并推荐给大家。

//这个软件真的好,不用为配置环境而烦恼了

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> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值