快速入门之递归,学习总结

写在前面

最近开始了算法系统学习,备战算法比赛。此文是本人在学习递归算法时的小节,供大家一起学习,如有错误,请联系我及时更正!!感谢=V=

递归算法之求n的阶乘

话不多说直接上代码

int fact(int n)
{
    if(n == 0)
    {
        return 1;
    }
    return fact(n - 1) * n;
}

递归算法之求斐波那契数列

类似于上题思路,直接上代码

int fib(int n)
{
    if(n <= 1)
    {
        return n;
    }
    return fib(n - 1) + fib(n - 2);
}

但是此代码时间复杂度高达O(2^n)我们需要一个记忆数组来记忆重复数据
于是就有了

递归算法之斐波那契数列高效版
int memo[1000];
int fibmax(int n)
{
    if(n<=1)
    {
        return n;
    }
    if(memo[n] != 0)
    {
        return memo[n]; //直接返回标记
    }
    return memo[n] = fibmax(n - 1) + fibmax(n - 2); //记录标记时进行更深层递归
}
下面用一道2020年“远光杯”粤澳计算机程序设计大赛网络资格赛的题目Q来作为结尾
问题描述

2020年,注定是不平凡的一年。疫情防控期间,小明的体育老师坚持“开学不返校,网教不停学”的原则,遵循线上教学的规律,精心组织教学设计,倾力打造线上体育课堂,其中一项是让同学们在家里玩跳格子的游戏。

游戏一共有n个格子,排成一列,小明每次只能跳1个格子或2个格子。小明需要从格子的一端跳向另一端,请问他一共有多少种跳法?

输入要求

多组输入。

每组输入一个格子的数量n(1<=n<=35)。

输出要求

每组输出一个整数,代表有多少种跳法,然后换行。

输入样例

2
3

输出样例

2
3

算法思路

简单的递归,将每种情况都实现出来,核心代码 return f(n - 2)+f(n - 1)
并且注意边界处理。

#include <iostream>
using namespace std;

int fun(int n)
{
    if( n < 0)
    return 0;
    if( n == 0 )
    return 1;
    return fun(n - 1) + fun(n - 2);
}
int main()
{
    int n = 0;
    while(cin >> n)
    {
         cout << fun(n) << endl;
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒜蓉蒸大虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值