什么是递归

递归的两大要素:

规模从大到小

题目:求n的阶乘

规模从小到大

题目:悟空吃蟠桃

分析:

题解一:递归解法

#include <iostream>     //悟空吃蟠桃
using namespace std;
int m;                  //天 
//获取第n天的蟠桃数
//n 第n天 
int f(int n) {          // 规模:从小到大 
	if (n==m) return 1; //最后1天剩下1个桃子 终止条件 
	else {
		return (f(n+1)+1)*2; //自己调用自己,递归关系式 
	}
}
int main() {
	cin>>m;      //第几天 
	int x=f(1);  //x第1天有多少桃子 
    cout<<x;
	return 0;
}

题解二:循环解法

/*
悟空吃蟠桃
循环解法 
*/
#include <iostream>
using namespace std;
const int N=35;
int a[N];
int main() {
    int n;
	cin>>n;
	a[n]=1;     //最后一天,1个桃子 
	for (int i=n;i>=1;i--) {
		a[i-1]=(a[i]+1)*2;
	}
	cout<<a[1];
    return 0;
}

小结

一般来说,如果一道题既可以递归解决,也可以循环解决,优先使用循环的方法。