2012-11-19 20 views
0

創建一個程序,找出Fibonacci序列中出現的大於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)); 
} 
+2

爲什麼你需要在這個程序中輸入? – raina77ow

+1

是否有可能你沒有輸出,因爲你的psNumber == 0? –

回答

0

盧克是對的。如果你的輸入是n,那麼Fibonacci(n)返回第(n + 1)個斐波那契數。 您的程序實際檢查(數字+1)是否完美。

如果你輸入12,那麼有輸出。因爲第13個斐波納契數是144.它是完美的方形。 PS:打印fibNumber而不是psNumber。

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

感謝您的反饋。有效 :) – redundant6939

0

現在你只計算一個斐波那契數,然後測試它是否是一個完美的正方形。要做到這一點,你必須使用循環。

0

第一個建議是擺脫創建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個索引。所以請確保您使用一致的定義來爲序列建立索引。