[英]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.