蓝桥杯世界赛b题网站扩张c++/c实现

网站扩张

题目

在这里插入图片描述
在这里插入图片描述

题目分析

本题,是一个典型的递归类问题,递归类问题,可以使用递归函数来解决,参照斐波那契数列的写法,可以仿写出来(初学者而言)
对于参赛选手的我们要学会分析问题,并将其转化为代码语言,代码量很少,难在思维,如果同学们可以理解并掌握思维方法,那么在少的代码量和好的代码风格将是得分的利器。

话不多说,正式开始分析,本题。
我们从题目可以知道,当天数也就是n小于或等于7天是,发展的人数只有一人,同样新推广出来的人也必须要超过七天才可以推广新的人,那么我们对天数进行分析,如果从推广第一个人开始,推广天数少于7天,那么就只有一个人,这便是递归的出口!

if (n<=7)
	return 1;

以上代码便是出口的定义,切记递归函数一定有出口!

在这里插入图片描述
递归的危害,一旦递归使用的量级过大,会占用极大的系统资源,上图是递归一个量级偏大的数,所占用的内存和cpu资源都是如此,所以,如果没有定义出口,递归就会一直进行下去,其产生的后果将难以估计。慎用递归,但是一定要会合理的使用递归。

出口找到后,就要开始分析出递推公式,递推公式有那些成分?
取决于所面临的问题,也就是对应的方法,推广有两个条件,新人有7天的观察期,七天过后每三天就可以推广一个人,大于七天少于11天最少也是两个人。
对公式进行描述,假设总推广日期大于7天,那么人员组成就成了,过了七天之后,推广的第一个人,他自己和他推广的人,还有就是总天数减三天,来看看是不是还大于7天,如果大于七天,就要返回这个人和这个人推广的人数,少于七天,则会触发递归出口(初始推广者就是这次触发出口而加的人),那么大于七小于11天就是第八天推广的人和自己两个人。
对上述进行代码语言描述:

int f(int n){
	if(n<=7)
		return 1;
	else
		return f(n-7)+f(n-3);
}

实现递归函数之后,这次的题目也就游刃而解了

完整代码:

#include <iostream>
using namespace std;


int print(int n){
    if(n<=7)
        return 1;
    else
        return print(n-7)+print(n-3);
}

int main()
{
    int n;
	
    cin>>n;
	
    cout<<print(n)<<endl;
    
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值