一.递归简介
程序调用自身的编程技巧称为递归( recursion)。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
二.递归实例
(1).问题描述
一个50级的台阶,从第一层走到第五十层,每次只能跨越一级或两级台阶,问总共有多少种方法实现?(腾讯面试题)
(2).问题分析
层数 | 方法种数 | 具体实现 | |
1 | 1 | 1 | |
2 | 2 | 11,2 | |
3 | 3 | 111,12,21 | |
...... | ...... | ........ | |
n | (n-1)+(n-2) |
(3).代码实现
#include<iostream>
using namespace std;
double go(double n)
{
if (n==1)
{
return 1.0;
}
else if(n==2)
{
return 2.0;
}
else
{
return go(n-1)+go(n-2);
}
}
int main()
{
double n;
cout<<"请输入阶数:";
cin>>n;
cout<<go(n)<<endl;
return 0;
}
问题实例二
(1).问题描述
设计一种方法让一个数反序输出,如输入123456,则输出654321.
(2).代码实现
方法一:
#include<iostream>
using namespace std;
int main()
{
int num,wei;
cout<<"请输入数字num:";
cin>>num;
int lastres=0;
while(num) //num=12345
{ //1 2 3 4 5
lastres *=10; //0 50 540 5430 54320
wei=num%10; //5 4 3 2 1
lastres +=wei; //5 54 543 5432 54321
num /=10; //1234 123 12 1 0
}
cout<<lastres<<endl;
return 0;
}
方法二(递归实现):