再帰計算とχ2乗分布
import java.applet.*; public class Fact extends Applet { public void init() { fact(5); } int fact(int N) { int L; System.out.println("in fact(" + N + ")"); if (N == 0) return (1); else { L = N * fact(N - 1); System.out.println("return fact;" + L); return (L); } } }実行例
int fib(int N) { int L; System.out.println("in fib(" + N + ")"); if (N == 1 || N == 2) return (1); else { L = fib(N - 1) + fib(N - 2); System.out.println("return fib;" + L); return (L); } }
double kai(int f, double x) { if (f == 1) return 1.0 / (Math.sqrt(2 * Math.PI * x * Math.exp(x))); if (f == 2) return 1.0 / (2 * Math.sqrt(Math.exp(x))); return (x / (f - 2)) * kai(f - 2, x); } }
for (int i = 1; i < 23; i++) { g.drawLine(ox + i * 20, oy + 180, ox + i * 20, oy + 175); g.drawString(Integer.toString(i), ox + i * 20 - 5, oy + 195); }
import java.awt.*; import java.awt.event.*; import java.applet.*; public class kai2 extends Applet { int ox = 20, oy = 20; public void paint(Graphics g) { int px, py, nx, ny; for (int f = 1; f <= 9; f = f + 2) { px = 0; py = -1; //関数表示 for (double x = 1.0; x < 23.0; x = x + 0.2) { nx = (int) (x * 20) + ox; ny = (int) ((0.3 - kai(f, x)) * 600) + oy; if (py > 0) g.drawLine(px, py, nx, ny); if (Math.abs(x - 1.4) < 0.01) g.drawString(Integer.toString(f), ox + 30, ny - 5); px = nx; py = ny; } } //軸の表示 g.drawLine(ox + 20, oy + 180, 23 * 20 + ox, oy + 180); g.drawLine(ox + 20, oy + 180, ox + 20, 20); //x軸目盛り for (int i = 1; i < 23; i++) { g.drawLine(ox + i * 20, oy + 180, ox + i * 20, oy + 175); g.drawString(Integer.toString(i), ox + i * 20 - 5, oy + 195); } for (double y = 0.0; y <= 0.3; y=y+0.05) { int fy=(int)((0.3-y)*600); g.drawLine(ox + 20, oy + fy, ox + 15, oy + fy); String st=""; if(Double.toString(y).length()>4) st=Double.toString(y).substring(0,4); else st=st=Double.toString(y); g.drawString(st, ox - 10, oy + fy); } g.drawString("χ2分布",100,50); } // 関数の計算 double kai(int f, double x) { if (f == 1) return 1.0 / (Math.sqrt(2 * Math.PI * x * Math.exp(x))); if (f == 2) return 1.0 / (2 * Math.sqrt(Math.exp(x))); return (x / (f - 2)) * kai(f - 2, x); } }