1. 程式人生 > >C語言----斐波那契數的n種實現方法

C語言----斐波那契數的n種實現方法

斐波那契數列(Fibonacci):第1,2兩個數為1,1。從第三個數開始,該數是其前面兩個數之和。

1.使用簡單程式碼實現

(1)每次迴圈只輸出後一位數

思想:前兩個數為1,1。先定義前兩個變數a,b。第三個數為前兩兩個數之和,定義第三個變數c,c=a+b;現在有三個數,為了避免冗餘,把第二個數的值賦給a,第三個數的值賦給b,c=a+b得到第四個數,以此類推…

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
 int n = 0;
 int a = 1;
 int b = 1;
 int c = 0;
 int i = 0;
 scanf("%d", &n);
 printf("%5d %5d ", a, b);
 for (i = 0; i < n - 2;i++)
 {
   c = a + b;
   a = b;
   b = c;
   printf("%5d ", c);
 }
 printf("\n");
 system("pause");
 return 0;
}

執行結果如圖:
在這裡插入圖片描述
(2)每次迴圈輸出後兩位數,提高效率

思想:只定義前兩個變數a,b。把a+b的結果不放在其他變數中,放在a中(a=a+b),取代原 a中的值,此時a中為第三個數的值,繼續執行,b=b+a,此時b為第四位數,以此類推…

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
 int n = 0;
 int a = 1;
 int b = 1;
 int i = 0;
 scanf("%d", &n);
 for (i = 0; i < n; i++)
 {
  printf("%5d %5d ", a, b);
  a = a + b;
  b = b + a;
 }
 system("pause");
 return 0;
}

執行結果如圖:
在這裡插入圖片描述
2.使用陣列方法實現

思想:上述方法只能順序計算並輸出各數,但不能在記憶體中儲存。如果想 直接輸出某個數,是比較困難的,此時可以利用陣列解決。每一個數組元素代表數列中的一個元素,依次求出各數並放在相應的陣列元素中即可。

//用陣列時此處必須給定陣列大小(20)
#include <stdio.h>
#include <stdlib.h>
int main()
{
 int arr[20] = { 1, 1 };
 int i = 0;
 for (i = 2; i < 20; i++)
 {
  arr[i] = arr[i - 1] + arr[i - 2];
 }
 for (i = 0; i < 20; i++)
 {
  printf("%10d ", arr[i]);
 }
 system("pause");
 return 0;
}

執行結果如圖:
在這裡插入圖片描述
3.使用函式方法實現

思想:思想和簡單程式碼類似,只是使用了函式的呼叫

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int fib(int n)
{
 int a = 1;
 int b = 1;
 int c = 1;
 int i = 0;
 for (i = 0; i < n - 2; i++)
 {
  c = a + b;
  a = b;
  b = c;
 }
 return c;
}
int main()
{
 int n = 0;
 int ret = 0;
 scanf("%d", &n);
 ret = fib(n);
 printf("%d\n", ret);
 system("pause");
 return 0;
}

執行結果如圖:
在這裡插入圖片描述
4.使用函式方法實現

//用遞迴方法實現輸出第n個斐波那契數
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int fib(int n)
{
 if (n <= 2)
 {
  return 1;
 }
 else
 {
  return fib(n - 1) + fib(n - 2);
 }
}
int main()
{
 int n = 0;
 int ret = 0;
 scanf("%d", &n);
 ret = fib(n);
 printf("%d\n", ret);
 system("pause");
 return 0;
}

執行結果如圖:
在這裡插入圖片描述