递归
递归的原理
递归(recursion),就是在函数代码中调用自己,使得重复的事简单化,递归是一个过程。不能无限地调用自己,递归必须有一个出口。
递归的用途
多用于数据结构按照递归建立,或重复执行一项操作。
典型的递归实列:
斐波纳契数列(1,1,2,3,5,8,13,21……..);
进制转换
最大公约数
字符操作
全排列
排序
递归代码
C++:
斐波拉契数列:
#include <iostream>
using namespace std;
int recusion(int position) {
int first = 1, second = 1;
if (position == 1 || position == 2) {
return 1;
} else return recusion(position-1) + recusion(position-2);
}
int main () {
int position;
cin >> position;
cout << recusion(position);
}
进制转换:
#include <iostream>
using namespace std;
void recusion(const int num, const int base) {
if (num == 0) {
return;
} else {
recusion(num / base, base);
if (num % base >= 10 && num % base <= 15) {
switch (num % base) {
case 10:
cout << 'A';
break;
case 11:
cout << 'B';
break;
case 12:
cout << 'C';
break;
case 13:
cout << 'D';
break;
case 14:
cout << 'E';
break;
case 15:
cout << 'F';
break;
}
} else cout << num % base;
}
}
int main () {
int num, base;
cin >> num >> base;
recusion(num,base);
}
最大公约数:
#include <iostream>
using namespace std;
int GCD (const int &p, const int &q) {
if (q != 0) {
return GCD(q,p % q);
} else return p;
}
int main () {
int num1, num2;
cin >> num1 >> num2;
cout << GCD(num1,num2);
}
递归的缺点
重复使用,占用大量内存,而出现内存错误,递归次数增加时,速度明显减慢。妥善使用递归。