1. 程式人生 > 其它 >為啥青蛙上樓問題數學法與動態規劃法結果不一致問題

為啥青蛙上樓問題數學法與動態規劃法結果不一致問題

技術標籤:pythonleetcode

為啥青蛙上樓問題數學法與動態規劃法結果不一致問題

題目

一隻青蛙一次可以跳上1級臺階,也可以跳上2級臺階。求該青蛙跳上一個 n 級的臺階總共有多少種跳法。
答案需要取模 1e9+7(1000000007),如計算初始結果為:1000000008,請返回 1。

方法一:動態規劃

class Solution:
    def numWays(self, n):
        a, b = 1, 1
        for _ in range(n):
            a, b = b, a + b
        return a % 1000000007


a = Solution(
) print(a.numWays(77)) print(a.numWays(78))

輸出結果:

261180706
923369890

方法二:純數學排列組合

class Solution:
    def factorial(self, n):  # 階乘函式
        if n == 0:
            return 1
        else:
            a = 1
            for i in range(1, n + 1):
                a *= i
            return a

    def numWays
(self, n: int) -> int: step_2 = n // 2 ways = 0 for i in range(step_2 + 1): total_step = n - i ways += self.factorial(total_step) / (self.factorial(i) * self.factorial(n - 2 * i)) return ways % 1000000007 a = Solution() print(a.numWays(77)) print(a.numWays(
78))

輸出結果:

261180706.0
923369889.0

可見 n=77時一致而n=78時不一致,是否是計算精度限制?該怎麼解決?