版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaomifanhxx/article/details/84248676
递归(Recursion):程序调用自身的编程技巧。
递归满足两个条件:
1)有反复执行的过程(调用自身)
2)有跳出反复执行过程的条件(递归出口)
递归案例:
1 斐波那契数列(Fibonacci Sequence)
//斐波那契数列
int fib(int n)
{
if (n == 1 || n == 2){ return 1; }
else
{
return fib(n - 1) + fib(n - 2);
}
}
2 n的阶乘
//n的阶乘
int Factorical(int n)
{
int sum;
if (n == 1){ return 1; }
else
{
sum = n*Factorical(n - 1);
return sum;
}
}
3 汉诺塔
//汉诺塔
//将编号为num的盒子从Init位置转移到dest位置
void moveOne(int current, string Init, string Dest)
{
cout << "No." << current << "from" << Init << "to" << Dest << endl;
}
void move(int num, string Init, string temp, string Dest)
{
if (num == 1) moveOne(num, Init, Dest);
else
{
move(num - 1, Init, Dest, temp);
moveOne(num, Init, Dest);
move(num - 1, temp, Init, Dest);
}
}
定义一个hanio类,方便调用
class Hanoi
{
public:
Hanoi(int disk){ num = disk; }
void Solve();
private:
int num;
void moveOne(int num, string Init, string dest);
void move(int sum_num, string Init, string temp, string dest);
};
void Hanoi::move(int sum_num, string Init, string temp, string dest)
{
if (sum_num == 1) moveOne(sum_num, Init, dest);
else
{
move(sum_num - 1, Init, dest, temp);
moveOne(sum_num, Init, dest);
move(sum_num - 1, temp, Init, dest);
}
}
void Hanoi::moveOne(int num, string Init, string dest)
{
cout << "Move disk No. " << num << " from " << Init << " to " << dest << endl;
}
void Hanoi::Solve()
{
string Init = "A";
string temp = "B";
string Dest = "C";
move(num, Init, temp, Dest);
}
4 全排列
//全排列
void Swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void Permutation(int num[], int start,int last)
{
if (start == last )
{
for (int i = 0; i < last; i++)
{
printf("%d", num[i]);
}
printf("\n");
count_num++;
}
else
{
for (int i = start; i <last; i++)
{
Swap(&num[start], &num[i]);
Permutation(num, start + 1, last);
Swap(&num[start], &num[i]);
}
}
}
参考博客:
https://blog.csdn.net/wwxy1995/article/details/82795325 C++全排列
https://blog.csdn.net/wencheng2998/article/details/5971194 C++全排列
https://blog.csdn.net/geekwangminli/article/details/7981570 实现汉诺塔问题