欢迎关注我的微信公众号:
编程之蓁
ID:
bianchengzhizhen
及时分享算法、计算机科学以及游戏编程内容
本人CSDN博客主页:
https://blog.csdn.net/D16100?spm=1000.2115.3001.5343
欢迎互相交流学习
————————————————
题目:
题目三:振兴中华
小明参加了学校的趣味运动会,其中的一个项目是:跳格子。
地上画着一些格子,每个格子里写一个字,如下所示:(也可参见p1.jpg)
从我做起振
我做起振兴
做起振兴中
起振兴中华
比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里,但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。
要求跳过的路线刚好构成“从我做起振兴中华”这句话。
请你帮助小明算一算他一共有多少种可能的跳跃路线呢?
答案是一个整数,请通过浏览器直接提交该数字。
C++源程序:
#include<iostream>
using namespace std;
int f(int x, int y){ // 表示二维坐标
if(x == 4 || y == 3) // 表示触碰墙壁
return 1;
return f(x+1, y) + f(x, y+1); // 表示两种选择,选择一种。 并将两次选择产生的次数结果相加。
}
int main(){
cout << f(0, 0) << endl;
return 0;
}
个人心得:
递归要
找重复
找变化——参数
找出口
这是递归的三要素!
同时本题的解题思路:
是从左上角走到右下角一共有多少种走法?并且其中哪几种是符合要求的。
1.递归!
2.迭代!
发现并不需要进行判断是否构成语句【因为只要向右和向下走都构成】
枚举总共条数
枚举的方法有递归 和 迭代
递归代码 最重要的是要将问题分解成小问题 在这道题的小问题就是可以向下走和向右走
递归停止条件就是走到了【边缘】
涉及知识:
递归算法!