1.最近专门学习了递归算法,因为递归算法在数据结构与算法中应用十分广泛,并且起着至关重要的作用,基本上所有数据结构相关的题都要用到递归算法。
2. 我用递归算法又重新做了之前的题,有了新的收获,相较于普通解法,用递归算法实现起来,代码更加简洁、直观。
以下是我复盘的几道题:
一、
//计算n的阶乘(递归算法);
#include<iostream>
using namespace std;
int f(int n) {
if (n <= 1) {
return 1; //当n递减至1的阶乘时停止
}
return n * f(n - 1); //即n!==n*(n-1)!每次阶乘都减少一个量
}
int main() {
int x,a;
cin>>x; //输入整数
a=f(x); //计算该整数的阶乘
cout << a;
return 0;
}
二、
//用辗转相除法计算两数最大公约数
#include<iostream>
using namespace std;
int fun(int a, int b) {
if (b == 0) //退出条件当除数为0时结束
return a; //将公约数传出
return fun(b, a % b); //利用辗转相除法的原理计算两数最大公约数,逐步抵消12和32的公共约数
}
int main() {
int ans;
ans=fun(12,32); //求12和32的最大公约数
cout << ans;
return 0;
}
------------------------------------------------------------------------------------------------------------------------
3.知识substr 函数相关用法补充,最近在做题的时候了解到substr的一种新用法:
//前序 string s1=BADC
//后续 string s2=BDCA
p1原用法 s1.substr(1,3)=‘AD’;
这里指的是AD (截取从1号开始到3号位置之前的那个字符)
p2 新用法 s1.substr(1)=‘DC’;
这里指的是DC ( 如果substr中只有一个参数的话,会返回从那个位置之后的字符串)