fork(1) download
  1. #include <stdio.h>
  2.  
  3. // 方法1
  4. int fib1(int n) {
  5. if (n == 0) return 0;
  6. if (n == 1) return 1;
  7.  
  8. int a = 0, b = 1, c, i;
  9. for (i = 2; i <= n; i++) {
  10. c = a + b;
  11. a = b;
  12. b = c;
  13. }
  14. return b;
  15. }
  16.  
  17. // 方法2
  18. int fib2(int n) {
  19. if (n == 0) return 0;
  20.  
  21. int fib[n+1];
  22. fib[0] = 0;
  23. fib[1] = 1;
  24.  
  25. int i;
  26. for (i = 2; i <= n; i++) {
  27. fib[i] = fib[i-1] + fib[i-2];
  28. }
  29. return fib[n];
  30. }
  31.  
  32. // 方法3
  33. int fib3(int n) {
  34. if (n == 0) return 0;
  35. if (n == 1) return 1;
  36. return fib3(n-1) + fib3(n-2);
  37. }
  38.  
  39. int main(void) {
  40. int n;
  41.  
  42. printf("非負の整数 n を入力してください: ");
  43. scanf("%d", &n);
  44.  
  45. printf("fib1(%d) = %d(変数のみ)\n", n, fib1(n));
  46. printf("fib2(%d) = %d(配列使用)\n", n, fib2(n));
  47. printf("fib3(%d) = %d(再帰関数)\n", n, fib3(n));
  48.  
  49. return 0;
  50. }
Success #stdin #stdout 0s 5324KB
stdin
6
stdout
非負の整数 n を入力してください: fib1(6) = 8(変数のみ)
fib2(6) = 8(配列使用)
fib3(6) = 8(再帰関数)