编程语言
首页 > 编程语言> > 蓝桥杯世界赛b题网站扩张c++/c实现

蓝桥杯世界赛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;
}

标签:七天,推广,递归,网站,代码,c++,出口,蓝桥,int
来源: https://blog.csdn.net/niko02/article/details/121440420