鱼C论坛

 找回密码
 立即注册
查看: 2296|回复: 15

关于斐波那契数列的问题

[复制链接]
发表于 2021-10-30 13:20:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 weiyideid823 于 2021-10-30 13:32 编辑

有N个台阶,每次只能跳1步或者3步,求有多少种跳法 (0 < N <=50)


请教大神这种该怎么写代码啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-30 13:20:42 | 显示全部楼层
这是斐波那契数列吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-30 13:28:12 | 显示全部楼层
嘉岳呀 发表于 2021-10-30 13:20
这是斐波那契数列吗?

类斐波那契数列吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-30 13:33:04 | 显示全部楼层
求助求助。。。。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-30 13:45:35 | 显示全部楼层

回帖奖励 +30 鱼币

每次只能跳1步或者2步 才是斐波拉契数列

不过我有个通用解法
import math


def p1(step: int, n: int) -> int:
    m = 0
    sln = 0
    while step >= 0:
        sln += math.factorial(step + m) / \
            math.factorial(step) / math.factorial(m)
        step -= n
        m += 1
    return int(sln)


# n=2时是斐波拉契数列
print(p1(1, 2))
print(p1(2, 2))
print(p1(3, 2))
print(p1(4, 2))
print(p1(5, 2))
# n=3时是你要求的
print(p1(50, 3))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-30 13:50:11 | 显示全部楼层
kogawananari 发表于 2021-10-30 13:45
每次只能跳1步或者2步 才是斐波拉契数列

不过我有个通用解法

大神,能不能加个注释啊啊 多谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-30 13:50:45 | 显示全部楼层

回帖奖励 +30 鱼币

学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-30 13:54:03 | 显示全部楼层
weiyideid823 发表于 2021-10-30 13:50
大神,能不能加个注释啊啊 多谢!

就是高中数学知识 全排列

假装全都是一步3级

然后把其中3步合成一步做排列组合 看有多少种

再把其中6步合成2步做排列组合 以此类推  总数全部相加
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-10-30 13:55:45 | 显示全部楼层
kogawananari 发表于 2021-10-30 13:54
就是高中数学知识 全排列

假装全都是一步3级

为什么不用递归 因为递归很卡 算的太慢 不如math库

至于优化递归变成循环 太烧脑了 保头发
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-30 14:17:25 | 显示全部楼层

回帖奖励 +30 鱼币

kogawananari 发表于 2021-10-30 13:55
为什么不用递归 因为递归很卡 算的太慢 不如math库

至于优化递归变成循环 太烧脑了 保头发

学到了 实在是大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-30 15:05:04 | 显示全部楼层
kogawananari 发表于 2021-10-30 13:45
每次只能跳1步或者2步 才是斐波拉契数列

不过我有个通用解法
import math


def p1(step: int, n: int) -> int:
    m = 0
    sln = 0
    while step >= 0:
        sln += math.factorial(step + m) / \   #请问这个地方是什么意思?
            math.factorial(step) / math.factorial(m)    #这个地方也是
        step -= n
        m += 1
    return int(sln)


# n=2时是斐波拉契数列
print(p1(1, 2))
print(p1(2, 2))
print(p1(3, 2))
print(p1(4, 2))
print(p1(5, 2))
# n=3时是你要求的
print(p1(50, 3))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-30 15:46:29 | 显示全部楼层

(a+b)!/a!/b!   是组合数C(a+b,a)的化简  即在a+b步中把其中a步变成 一步3级台阶 有多少种变法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-30 16:20:27 | 显示全部楼层

回帖奖励 +30 鱼币

搜一搜应该能搜到吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-30 23:33:00 | 显示全部楼层

回帖奖励 +30 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-31 08:23:35 | 显示全部楼层
最简单,最短解法:
list = [1, 1]
N = int(input("请输入台阶:"))
for i in range(2, N):
        list.append((list[i-2]) + (list[i-1]))
print(f"共有 {list[-1]} 跳法")
输入/输出:
请输入台阶:13
共有 233 跳法

评分

参与人数 1荣誉 +1 收起 理由
全桥整流 + 1 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-11-1 14:28:28 | 显示全部楼层
有这么多鱼币吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 22:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表