如何通过数学公式计算斐波那契函数

时间:2019-02-12 02:52:55

标签: javascript math

如何通过数学公式计算斐波那契函数

我尝试过此公式,但不起作用:

fib(n) = ((1 + 5^0.5) / 2)^n - ((1 - 5^0.5) / 2)^n / 5^0.5

const fib=(n)=>{
    return ((1+(5**0.5))/2)**n-((1-(5**0.5))/2)**n/(5**0.5)
}

有人知道怎么做吗?谢谢。

3 个答案:

答案 0 :(得分:2)

该公式是正确的,您只需要添加一些额外的()

const fib=(n)=>{
    return (((1+(5**0.5))/2)**n-(((1-(5**0.5))/2)**n))/(5**0.5)
}
for(let i = 0;i<9;i++){
  console.log(fib(i))
}

答案 1 :(得分:0)

您似乎正在尝试重新创建 Binet的公式。您可以像这样分解公式,这样更容易阅读:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:layout_marginBottom="4dp"
    app:cardBackgroundColor="@android:color/white">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:background="@android:color/white"
        android:paddingStart="2dp"
        android:paddingEnd="2dp"
        android:paddingBottom="2dp"
        android:paddingTop="2dp"
        android:layout_marginStart="@dimen/activity_margin"
        android:layout_marginLeft="@dimen/activity_margin"
        android:layout_marginEnd="@dimen/activity_margin"
        android:layout_marginRight="@dimen/activity_margin">


        <LinearLayout
            android:id="@+id/asset_data_layout"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_gravity="top"
            android:background="@android:color/white"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:layout_weight="1"
                android:orientation="horizontal"
                android:background="@android:color/white">

                <LinearLayout
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_gravity="top"
                    android:background="@android:color/white"
                    android:orientation="vertical"
                    android:layout_marginEnd="@dimen/activity_margin"
                    android:layout_marginRight="@dimen/activity_margin">

                    <ImageView
                        android:id="@+id/asset_list_icon"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_alignParentStart="true"
                        android:layout_alignParentLeft="true"
                        android:layout_centerVertical="true"
                        android:scaleType="centerInside"
                        tools:src="@mipmap/ic_launcher"
                        android:contentDescription="@string/icon"
                        />

                </LinearLayout>

                <LinearLayout
                    android:id="@+id/asset_list_text_layout"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:layout_gravity="top"
                    android:background="@android:color/white"
                    android:orientation="vertical">

                    <TextView
                        android:id="@+id/asset_list_name"
                        android:layout_width="wrap_content"
                        android:layout_height="22dp"
                        android:textSize="18sp"
                        android:textStyle="bold"
                        tools:text="Name"
                        />

                    <TextView
                        android:id="@+id/asset_list_position_time"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_below="@+id/asset_list_name"
                        android:layout_marginTop="2dp"
                        android:ellipsize="end"
                        android:maxLines="1"
                        android:textSize="16sp"
                        android:textStyle="bold"
                        tools:text="05/08/2017 10:00:00"
                        />
                </LinearLayout>
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:orientation="horizontal"
                android:background="@android:color/white">

                <TextView
                    android:id="@+id/asset_list_position_address"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/asset_list_position_time"
                    android:layout_marginTop="2dp"
                    android:ellipsize="end"
                    android:maxLines="2"
                    android:textSize="16sp"
                    tools:text="Address"
                    />
            </LinearLayout>

        </LinearLayout>

        <!-- Buttons -->
        <LinearLayout
            android:layout_width="40dp"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <ImageButton
                android:id="@+id/action_anchor"
                style="@style/Widget.AppCompat.Button.Borderless.Colored"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:gravity="center"
                android:src="@drawable/ic_anchor_black_48dp"
                android:tint="@color/orange"
                android:layout_marginBottom="10dp"/>


            <ImageButton
                android:id="@+id/action_command"
                style="@style/Widget.AppCompat.Button.Borderless.Colored"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:adjustViewBounds="true"
                android:scaleType="centerInside"
                android:gravity="center"
                android:padding="0dp"
                android:src="@drawable/ic_upload_black_48dp"
                android:tint="@color/grey"/>

        </LinearLayout>
    </LinearLayout>
</RelativeLayout>

答案 2 :(得分:0)

我要做的第一件事就是定义φ

var φ = (1 + 5 ** 0.5) / 2;

然后简短一点的形式是:

var fib = (n) => (φ ** n - ((-φ) ** -n)) / (2 * φ - 1);

因为您想要一个整数作为结果,所以您也可以调用Math.round()