本文共 1440 字,大约阅读时间需要 4 分钟。
从 (0,0) 到(m,n)每次只走一步,只能向上或者向右走,有多少种路径走到(m,n)
//到达(m,n),可以从左或下两个方向,左边和下边单独进行递归求路径到下一个点。//这种归纳到最后,应该就成了(1,1)-(1,0 )或者(0,1),//然后(0,0)到这两个点都是1条路径,所以if(x == 0 || y == 0) return 1#define _CRT_SECURE_NO_WARNINGS#includeusing namespace std;int path_xy(int x, int y) { if (x == 0 || y == 0) { return 1; } else { return path_xy(x - 1, y) + path_xy(x, y - 1); }}int main() { int m, n; int path; while (rewind(stdin), scanf("%d %d", &m, &n) != EOF) { path = path_xy(m, n); printf("到达你所输入坐标(%d,%d)的路径数为:%d\n", m, n, path); } return 0;}
打印出路径的代码思路,参考https://blog.csdn.net/awyyauqpmy/article/details/82936433内容
#define _CRT_SECURE_NO_WARNINGS#include#define MAX 1000int path_value[MAX][2]; void trace_path(int index) { int i; for (i = 0; i < index; i++) printf("(%d,%d)->", path_value[i][0], path_value[i][1]); printf("(%d,%d)\n", path_value[i][0], path_value[i][1]);}void path_xy(int x, int y, int index, int* count) { path_value[index][0] = x; path_value[index][1] = y; if (x == 0 && y == 0) { (*count)++; trace_path(index); return; } if (x < 0 || y < 0) return; path_xy(x - 1, y, index + 1, count); path_xy(x, y - 1, index + 1, count);}int main() { int m, n; int path; int count = 0; while (rewind(stdin), scanf("%d %d", &m, &n) != EOF) { //path = path_xy(m, n, 0, &count); path_xy(m, n, 0, &count); printf("到达你所输入坐标(%d,%d)的路径数为:%d\n",m,n, count); } return 0;}
非递归实现的代码思路: