簡體   English   中英

斐波那契數列中的完美平方?

[英]Perfect square in fibonacci sequence?

創建一個程序以找出斐波那契數列中出現的第一個大於1的完美平方,並將其顯示在控制台上。

輸入輸入時沒有輸出。

#include <stdio.h>
#include <math.h>

int PerfectSquare(int n);
int Fibonacci(int n);

main()
{
    int i;
    int number=0;

    int fibNumber=0;
    int psNumber=0;


    printf("Enter fibonacci number:");
    scanf("%i",&number);


    fibNumber = Fibonacci(number);

    psNumber = PerfectSquare(fibNumber);

    if(psNumber != 0){
        printf("%i\n",psNumber);
    }
}



int PerfectSquare(int n)
{

    float root = sqrt(n);
    if (n == ((int) root)*((int) root))
        return root;
    else
        return 0;
}

int Fibonacci(int n){
    if (n==0) return 0;
    if (n==1) return 1;
    return( Fibonacci(n-1)+Fibonacci(n-2) );
}

現在,您只計算一個斐波那契數,然后測試它是否是理想的平方。 要正確執行此操作,您必須使用循環。

路是正確的。 如果輸入為n,則Fibonacci(n)返回第(n + 1)個斐波那契數。 您的程序實際上檢查第(+1)個數字是否為完美平方。

如果輸入12,則輸出。 因為第13個斐波那契數是144。它是完美的平方。 PS:打印fibNumber而不是psNumber。

        printf("%i\n", fibNumber);

第一個建議是擺脫遞歸以創建fib編號。 您可以使用2個變量並連續跟蹤最后2個fib編號。 他們被添加類似:

fib1=0;fib2=1;
for(i=3;i<MAXTOCHECK;i++)
{
    if(fib1<fib2)
        fib1+=fib2;
    else
        fib2+=fib1;
}

這種方法的好處是,首先您可以將種子更改為所需的任何內容。 找到類似fib的序列真好。 例如,盧卡斯數字的種子是2和1。其次,您可以檢查方形內聯而不是每次都完全不重新計算序列。

注意:如前所述,您的索引可能已關閉。 從最初的播種方式開始索引fib編號存在一定的隨意性。 如果使用1和1進行種子設定,則可以看出這一點。您得到的相同序列移位了1個索引。 因此,請確保使用一致的定義來索引序列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM