如何通过数学公式计算斐波那契函数
我尝试过此公式,但不起作用:
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)
}
有人知道怎么做吗?谢谢。
答案 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()
。