问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法
int frog(int tage)
{
map<int, int > hash;
if (tage <= 2)
return tage;
if (hash.find(tage) == hash.end())
{
hash[tage] = frog(tage - 1) + frog(tage - 2);
return hash[tage];
}
else
{
return hash[tage];
}
}
核心问题:
1.递归:
递归是将问题拆解成一个个子问题的算法,利用函数调用栈的特点可以非常好的解决问题,思考时可以将其看作一个数学函数
例:
f(5) = f(4) + f(3)
f(5) = (f(3) + f(2)) + (f(2) + f(1))
f(5) = ((f(1) + f(2)) + f(2)) + (f(1) + f(2))
如上相当于不断拆分后拆分成一个基本元素;
2.map容器
map容器是STL中的关联容器,用于储存一个数组。 可用于一一映射。
find()函数可以用于查找在容器中该元素的位置,如果未查找到将返回end位置的迭代器(可用来检测)
可以将对象以数组的形式存入容器中。