weiyideid823 发表于 2021-10-30 13:20:02

关于斐波那契数列的问题

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

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


请教大神这种该怎么写代码啊

嘉岳呀 发表于 2021-10-30 13:20:42

这是斐波那契数列吗?

weiyideid823 发表于 2021-10-30 13:28:12

嘉岳呀 发表于 2021-10-30 13:20
这是斐波那契数列吗?

类斐波那契数列吧

weiyideid823 发表于 2021-10-30 13:33:04

求助求助。。。。。。。。。。。

kogawananari 发表于 2021-10-30 13:45:35

每次只能跳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))

weiyideid823 发表于 2021-10-30 13:50:11

kogawananari 发表于 2021-10-30 13:45
每次只能跳1步或者2步 才是斐波拉契数列

不过我有个通用解法

大神,能不能加个注释啊啊 多谢!

全桥整流 发表于 2021-10-30 13:50:45

学习一下

kogawananari 发表于 2021-10-30 13:54:03

weiyideid823 发表于 2021-10-30 13:50
大神,能不能加个注释啊啊 多谢!

就是高中数学知识 全排列

假装全都是一步3级

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

再把其中6步合成2步做排列组合 以此类推总数全部相加

kogawananari 发表于 2021-10-30 13:55:45

kogawananari 发表于 2021-10-30 13:54
就是高中数学知识 全排列

假装全都是一步3级


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

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

100gram 发表于 2021-10-30 14:17:25

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

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

学到了 实在是大佬

全桥整流 发表于 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))

kogawananari 发表于 2021-10-30 15:46:29

全桥整流 发表于 2021-10-30 15:05


(a+b)!/a!/b!   是组合数C(a+b,a)的化简即在a+b步中把其中a步变成 一步3级台阶 有多少种变法

心驰神往 发表于 2021-10-30 16:20:27

搜一搜应该能搜到吧

tianlai7266 发表于 2021-10-30 23:33:00

{:10_254:}

傻眼貓咪 发表于 2021-10-31 08:23:35

最简单,最短解法:{:5_105:} list =
N = int(input("请输入台阶:"))
for i in range(2, N):
        list.append((list) + (list))
print(f"共有 {list[-1]} 跳法")输入/输出:请输入台阶:13
共有 233 跳法{:7_146:} {:7_146:} {:7_146:} {:7_146:} {:7_146:} {:7_146:}

帅昊昊昊 发表于 2021-11-1 14:28:28

有这么多鱼币吗?
页: [1]
查看完整版本: 关于斐波那契数列的问题