10:クラス-フィボナッチ数列

誰もがフィボナッチ数列を知っていて、整数nが必要になりました。フィボナッチ数列のn番目の項目を出力してください。n <= 39
n = 0、f(n)= 0 n = 1、f(n)= 1 n> 1、f(n)= f(n-1)+ f(n-2)
メソッド1:サイクルをより速く使用する

class Solution:
    def fib(self, x):
        if x<=0:
            return 0
        elif x ==1:
            return 1
        else:
            n, a, b = 0, 0, 1
            while n+1 != x:
                a, b = b, a + b
                n += 1
            return b
a = Solution()
b = a.fib(4)
print(b)

方法2:再帰を使用する、遅い

class Solution:
    def fib(self, x):
        if x<= 0:
            return 0
        elif x==1:
            return 1
        else:
            return self.fib(x-1)+self.fib(x-2)
a = Solution()
b = a.fib(4)
print(b)

トピックの拡張1:ステップ
のジャンプカエルは一度に1 ステップまでジャンプしたり、2ステップまでジャンプしたりできます。nレベルのステップにジャンプする方法をカエルに尋ねます。
アイデア:
ステップが1つしかない場合、方法は1つだけです。2つのステップがある場合、ジャンプする方法は2つあります。2つのジャンプ、一度に1つのステップ、または一度に2つのステップです
。nステップのジャンプ方法は、nの関数として実行します。(n)。n> 2の場合、最初のジャンプには2つの異なるジャンプがあります。1つは、1つのレベルを初めてジャンプすることです。ジャンプの数は、n-1ジャンプの残りの数、つまりf(n-1)です。 、2番目は2つのレベルを初めてジャンプすることであり、ジャンプの数は残りのn-2ジャンプの数、つまりf(n-2)です。したがって、ジャンプの総数はf(n)= f(n-1)+ f(n-2)です。それはフィボナッチ数列と同じです。同じ問題、つまり、n番目のプラットフォームジャンプの数は、n-1プラットフォームジャンプの数とn-2プラットフォームジャンプの数の合計に等しくなります。

#循环:
class Solution:
    def jump(self, x):
        if x <= 0:
            return 0
        elif x == 1:
            return 1
        elif x == 2:
            return 2
        else:
            n, a, b = 1, 1, 1
            while n != x:
                a, b = b, a + b
                n += 1
            return b
            #另一种写法:实测两种运行时间相近
            #a, b = 1,2
            #for i in range(3,x+1):
            #a,b = b,a+b
            #return b
#递归:
class Solution:
    def jump(self,n):
        if n == 1:
            return 1#如果是一个台阶,有一种跳法
        elif n == 2:
            return 2#如果是两个台阶,有两种跳法
        else:
            return self.jump(n-1)+self.jump(n-2)

トピック展開2:異常なジャンプステップ
カエルは一度に1 ステップ、または2ステップジャンプできます... nレベルにジャンプすることもできます。nレベルのステップにジャンプする方法をカエルに尋ねます。
アイデア:同じ理由で、n次のプラットフォームのジャンプメソッドをnの関数f(n)として使用します。n> 2の場合、初めてジャンプするときに多くの違いがあります。1つ目は初めて1レベルだけジャンプしてn-1レベルのジャンプを残します。2つ目は初めて2レベルだけジャンプします。 n-2レベルジャンプ方式では、3番目は3レベルだけを初めてジャンプし、残りのn-3レベルジャンプ方式は... 123レベルジャンプ方式が124の場合、4番目のレベルジャンプ方式は最初の一度に1レベルのみ+初回は2レベルのみ+初回は3レベル+初回は4レベル、つまりf(n)= f(n-1)+ f(n-2)+ f(n-3)+ f(n-4)、つまりf(3)+ f(2)+ f(1)+ f(0)= 4 + 2 + 1 + 1 = 8、法則が2であることを確認** (N-1)

class Solution:
    def jump(self, n):
        if n<=0:
            return 0
        return 2**(n-1)

トピック展開3:長方形のカバレッジ
21個の小さな長方形を使用して、大きな長方形を水平または垂直にカバーできます2 * nの大きい長方形を重なり合わずにn 2の小さい長方形でカバーする方法はいくつありますか?
アイデア:同様に、n列の長方形の配置方法をf(n)と考えてみましょう。n>には2種類の配置方法があります:垂直、左f(n-1)、水平、左f (n-2)播種方法。合計f(n)= f(n-1)+ f(n-2)。コードは同じです

元の記事を16件公開 賞賛された0 訪問数154

おすすめ

転載: blog.csdn.net/qq_43275748/article/details/102778053