C++ 递归实现及理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_36161077/article/details/81585316

这几天在刷牛客网的题库,因为之前一段时间一直在忙自己项目的事情,平时较为常用的变成语言是python,但是在牛客网刷题时发现仅仅熟悉一种语言是远远不够的,大学的时候学过C语言,但是拿到二级证书之后就没有实战过,C++也接触过一些,做过关于C++的项目,后面慢慢接触机器学习和深度学习,深刻体会到python的好用,所以C++也搁置了。这几天在努力地将这些语言捡起来,几天在牛客网上看到一道递归的题目:

x × y 的网格,小团要在此网格上从左上角到右下角,只能走格子点且只能向右或向下。请设计一个算法,计算小团有多少种走法。给定两个正整数int x,int y,请返回小团的走法数目。

看到用户 hzwaxx的C++代码, 忍不住记录了一下。代码如下:

#include <iostream>
using namespace std;
int step(int m,int n){
    if (m == 0 || m == 0)
        return 1;
    return step(m - 1,n) + step(m,n - 1);
}
int main(){
    int x,y;
    cin >> x >> y;
    cout << step(x,y) << endl;
}

这道题传递的是一种递归的思想,最终小团会走到右下角,小团一旦碰到右边的边界或者下边的边界,那么他就只能有往一个方向走了。我们需要理清楚的是递归的实现,以上代码中,如输入

3 2

输出值为:

10

我们将3 2传入到step中,返回的是step(2,2) + step(3,1),而step(2,2)和step(3,1)继续参与递归运算,这样就可以递归得到
step(3,2) = step(2,2) + step(3,1) = step(1,2) + step(2,1) + step(2,1) + step(3,0) = step(0,2) + step(1,1) + step(1,1) + step(1,0) + step(1,1) + step(1,0) + step(3,0) = step(0,2) + step(0,1) + step(1,0) + step(0,1) + step(1,0) + step(1,0) + step(0,1) + step(1,0) + step(1,0) + step(3,0) = 10

猜你喜欢

转载自blog.csdn.net/baidu_36161077/article/details/81585316
今日推荐