跳格子的问题

常见的一个经典问题:

从格子外面朝着格子里面跳,请问假定如果每次只能跳一个格子或者两个格子,跳到第八个格子有多少种不同的跳法?
在这里插入图片描述

数学的想法

这是一个关于数列的题,可以这样去想一个存在递归的问题:
假如我要跳到第 n n n 个格子,那么就必须要在前一步跳到第 n − 1 n-1 n1 或者 n − 2 n-2 n2 个格子,如果说跳到第 n n n 个格子用的次数为 a n a_n an ,那么 a n = a n − 1 + a n − 2 a_n = a_{n-1}+ a_{n-2} an=an1+an2
注意,在这个地方有一个理解问题,为什么在等式的右侧没有系数:尽管 n − 2 n-2 n2 能够通过移动一个格子移动到 n − 1 n-1 n1 的位置,但是这样会导致计算的重复性,因此前面不加系数,直接可以默认为从 n − 2 n-2 n2 个格子是跳一次移动两个格子到 n n n 的这个位置。
那么,根据这样的想法,去求解这个数学问题就很简答了,就直接是斐波那契数列了:对于前面的跳格子的跳法进行计算,后面的就可以根据前面两项进行求和计算。

格子数12345678910
跳法123581321345589

当然,如果是步长设置最长为3,那么就相当于这个项的前面三项的值进行求和即可

格子数12345678910
跳法124713244481149274

以此类推,后面的格子可以根据前面的格子跳法来求和进行计算。

代码

运用代码来写递归的方式同样可以计算
python代码如下 代码片:

def get_num(i):
    k = input('请输入{}(若希望终止请输入 \'False\') :'.format(i))
    k = k.upper()
    if k == 'FALSE':
        return False
    try:
        k=float(k)
    except ValueError as reason:
        print('输入有误,请输入整数值:')
        return get_num()
    if k==int(k):
        k=int(k)
        return k
    else:
        print('输入有误,您输入的数值为浮点数,请输入整数值')
        return get_num()

def get_point():
    point = {}
    point_name = ['终点','最大步长']
    for i in point_name:
        point[i] = get_num(i)
        if point[i] is False:
            return False
    return point    

def num_count(begin_point,end_point,max_step):
    if begin_point>end_point:
        return 0
    if begin_point==end_point:
        return 1
    else:
        return sum([num_count(begin_point+1+i,end_point,max_step) for i in range(max_step)])

if __name__=='__main__':
    point = get_point()
    if point is False:
        print('输入的内容有误,程序已经终止')
    else:
        end_point = point['终点']
        max_depth = point['最大步长']
        begin_point = 0
        num = num_count(begin_point,end_point,max_depth)
        a ='='*50
        print('\n',a,end='\n\n')
        print('起始点为:{}\n终点为:{}\n最大步长为:{}'.format(begin_point,end_point,max_depth))
        print('所走的总的不同选择有 {} 种'.format(num))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
跳格子C是一款华为OD(OpenDaylight)开源控制器的应用程序。华为OD是华为公司开发的用于软件定义网络(SDN)的控制器平台。跳格子C利用华为OD的功能和特性,为跳格子游戏提供了一个新的玩法。 跳格子游戏是一种经典的益智游戏,玩家需要控制一个小方块在不同格子之间跳跃,目标是通过跳跃的方式使每个格子都被方块占领。传统的跳格子游戏通常是在一个固定的格子图中进行,而跳格子C通过结合华为OD的网络虚拟化技术,使得游戏变得更加有趣和挑战。 跳格子C利用华为OD的控制器平台,可以将跳格子游戏扩展到多个物理或虚拟的网络节点中。每个节点都可以表示为游戏中的一个格子,而连接不同节点的网络链路可以表示为游戏中的跳跃路径。玩家可以通过华为OD的控制器,实时控制方块在不同节点之间的跳跃,以占领所有的格子跳格子C在游戏的过程中,可以利用华为OD的网络编程接口来实现一些特殊的玩法。比如通过实时监测网络链路的拥塞情况,玩家可以选择在链路拥塞较少的路径上跳跃,以提高游戏的速度和效率。另外,跳格子C还可以利用华为OD的流表来进行网络流量的控制,从而模拟出不同的游戏难度和挑战。 总之,跳格子C是一款利用华为OD开源控制器的应用程序,为传统的跳格子游戏带来了新的玩法。通过结合华为OD的网络虚拟化技术,跳格子C使得游戏变得更加有趣和具有挑战性。同时,跳格子C还可以通过华为OD的网络编程接口实现一些特殊的玩法,为玩家提供更多的游戏乐趣。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值