递归算法解决问题的特点:
1. 递归就是在过程或函数里调用自身。
2.在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
例题分析:
一、2的分解
思路:先将2的从1到17的幂次方求出存入一个数组,方便递归使用。定义一个函数进行对该数的分解,注意n=2时,直接输出2,
结束的条件为n>0,利用for循环和递归调用找出分解即可。
源代码:#include<iostream>
using namespace std;
const int MAX = 17;
int A[MAX]={
1};
void FunPow(int n);
int main()
{
for (int i=1; i<MAX; i++) //预处理2的n次幂
A[i] = A[i-1] * 2;
int n;
cin >> n;
FunPow(n);
return 0;
}
void FunPow(int n)
{
if (n == 0 || n == 2)
{
cout << n;
return;
}
int b;
while (n > 0)
{
int i ;
for(i=MAX-1;i>=0;i--){
if(A[i]<=n) {
b=A[i]; break;