递归基础学习

递归基础

关于递归

我们先通过一个形象的例子感受一下递归:
一个小朋友坐在第 10 排,他的作业本被小组长扔到了第 1 排,小朋友要拿回他的作业本,怎么办呢?他可以拍拍第 9 排小朋友,说:“帮我拿第 1 排的本子”,而第 9 排的小朋友可以拍拍第 8 排小朋友,说:“帮我拿第 1 排的本子”…如此下去,消息终于传到了第 1 排小朋友那里,于是他把本子递给第 2 排,第 2 排又递给第 3 排…终于,本子到手啦!
在这里插入图片描述
在函数内部,可以调用其他函数。如果一个函数在内部调用自己本身,这个函数就是递归函数。
如果一个函数在调用自己, 则被调用的”自己”再调用“自己”, 想象一下, 这将会无限循环下去, 所以递归函数中肯定有办法在某种情况下停止调用自己, 即停止递归, 一般来说使用 if 语句实现在满足特定的条件下终止递归。
2.函数不再递归的情况称作基本情形( base case, ​ 也称基本情况)。
3.函数调用自身来执行子任务的情况就称作递归情形( recursive case )。
递归函数的格式如下:

递归函数格式如下:
函数类型 函数名(形参1)
{
   
    if(条件1)
        该条件下的函数值;
    else if(条件2)
         另一种条件下的函数值;
    ......
     执行操作并进行递归调用;
}

递归通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大的减少程序的代码量。
我们用代码来模拟一下小朋友拿作业本的情景。

#include <bits/stdc++.h>
using namespace std;
void solve(int n){
   
    if(n > 1){
   
        cout << n - 1 <<"排的同学,帮我拿一下第一排的作业"<< endl;
        solve(n-1);
    }
    cout <<"我是第"<< n <<"排的同学,我拿到作业了"<< endl;
}
int main(){
   
    solve(10);
    return 0;
}

程序的运行结果是:

9排的同学,帮我拿一下第一排的作业
8排的同学,帮我拿一下第一排的作业
7排的同学,帮我拿一下第一排的作业
6排的同学,帮我拿一下第一排的作业
5排的同学,帮我拿一下第一排的作业
4排的同学,帮我拿一下第一排的作业
3排的同学,帮我拿一下第一排的作业
2排的同学,帮我拿一下第一排的作业
1排的同学,帮我拿一下第一排的作业
我是第1排的同学,我拿到作业了
我是第2排的同学,我拿到作业了
我是第3排的同学,我拿到作业了
我是第4排的同学,我拿到作业了
我是第5排的同学,我拿到作业了
我是第6排的同学,我拿到作业了
我是第7排的同学,我拿到作业了
我是第8排的同学,我拿到作业了
我是第9排的同学,我拿到作业了
我是第10排的同学,我拿到作业了

课堂练习:上台阶 easy

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值