头歌实验:
第一关:双关系递推数列
任务描述
本关任务:运用枚举和递推的基本思想,通过编程计算出双关系递推数列。设集合 M 定义如下:
1.初始 1∈M;
2.若x∈M,则有2x+1∈M,5x−1∈M;
3.再无其它的数属于M。
试求集合M中的元素从小到大排列后所得序列的第n项,其中n<10001。
枚举算法的两种框架
枚举的本质就是从所有的备选答案中去查询正确的解。一般的,使用枚举算法需要满足两个基本条件:
- 备选答案的数量是确定的或是有限个数的;
- 备选答案的范围在求解之前也应该是确定的。
枚举算法有两种常见的框架:区间枚举和递增枚举。
区间枚举的主要思想是对于一个给定的闭区间,从该区间的下限一直逐个枚举到该区间的上限;
递增枚举的主要思想是从给定的枚举起点开始,一直逐个枚举,直到找到满足条件的解,程序结束。
递推算法的实施步骤
递推的定义:给定一个数的序列H0,H1,...,Hn,...,若存在整数n0,使当n>n0时,可以用等号(或大于号、或小于号)将Hn与其前面的某些项Hi,i∈[0,n0]联系起来,这样的式子就叫做Hn的递