include stdio h int main int i int

  • Slides: 39
Download presentation

#include <stdio. h> int main() { int i; int n; int fn 1; int

#include <stdio. h> int main() { int i; int n; int fn 1; int fn 2; printf("n="); 条件式 scanf("%d", &n); fn 1 = 1; fn 2 = 1; for (i=2; i<=n; i++) { fn=fn 1+fn 2; 条件が成り立つ限り, fn 2=fn 1; 実行されつづける部分 fn 1=fn; printf("f(%d) = %dn", i, fn); 順番に意味がある. } fn 1=fn; return 0; fn 2=fn 1; } 8 とはしないこと

#include <stdio. h> int fib(int n) { if (n<=1) { return 1; } else

#include <stdio. h> int fib(int n) { if (n<=1) { return 1; } else { return fib(n-1)+fib(n-2); } } int main() { int n; int fn; printf("Enter a number: "); scanf("%d", &n); fn = fib(n); printf("Fib(%d)=%dn", n , fn); return 0; } 11

「再帰」によるフィボナッチ数 列 n <= 1 No Yes return fib(n-1) + fib(n-2); return 1; 13

「再帰」によるフィボナッチ数 列 n <= 1 No Yes return fib(n-1) + fib(n-2); return 1; 13

#include <stdio. h> int mc 91(int n) { if (n>100) { return n-10; }

#include <stdio. h> int mc 91(int n) { if (n>100) { return n-10; } else { return mc 91(n+11)); } } int main() { int n; int mc; printf("Enter a number: "); scanf("%d", &n); mc = mc 91(n); printf("mc 91(%d)=%dn", n , mc ); return 0; } 18

Mc. Carthyの 91関数 実行結果の例 Enter a number: 20 mc 91(20)=91 19

Mc. Carthyの 91関数 実行結果の例 Enter a number: 20 mc 91(20)=91 19

#include <stdio. h> int ack(int m, int n) { if (m==0) { return n+1;

#include <stdio. h> int ack(int m, int n) { if (m==0) { return n+1; } else if (n==0) { return ack(m-1, 1); } else { return ack(m-1, ack(m, n-1)); } } int main() { int n; int m; int a; printf("m="); scanf("%d", &m); printf("n="); scanf("%d", &n); a = ack(m, n); printf("Ack(%d, %d)=%dn", m , n , a); return 0; } 23

Ackermann関数 実行結果の例 m=2 n=4 Ack(2, 4)=11 24

Ackermann関数 実行結果の例 m=2 n=4 Ack(2, 4)=11 24

#include <stdio. h> int sum(int n, int s) { if (n==0) { return s;

#include <stdio. h> int sum(int n, int s) { if (n==0) { return s; } else { return sum(n-1, n+s); return 文の中でのみ } 再帰呼び出し } int main() { int n; int souwa; printf("Enter a number: "); scanf("%d", &n); souwa = sum(n, 0); printf("sum(%d)=%dn", n, souwa); return 0; } 31

n と s の値の変化 (main 関数で n = 2 のとき) main 関数 int main()

n と s の値の変化 (main 関数で n = 2 のとき) main 関数 int main() 関数呼び出し sum(n, 0); sum 関数 int sum( int n, int s ) n=2 s=0 関数呼び出し と戻り return sum(n-1, n+s); sum 関数 int sum( int n, int s ) n=1 s=2 関数呼び出し と戻り return sum(n-1, n+s); sum 関数 int sum( int n, int s ) n=0 s=3 戻り return s; 33