C++ 递归实现及理解

2 篇文章 0 订阅

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

x×y 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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值