Als ich über [FizzBuzz-Problem] nachdachte (https://qiita.com/ytaki0801/items/1309b33d55d106d84bd5), programmierte ich auch das Problem "Erstellen Sie ein Programm, das (vorerst) 45 Fibonacci-Sequenzen generiert und anzeigt". Ich frage mich, ob es eine Art Indikator dafür sein könnte. In den Tags in diesem Artikel und in den Kommentaren im Beispielcode finden Sie, was Sie sagen möchten.
Die Ausführung des folgenden Beispielprogramms (ohne Kommentare) wurde auf dieser Website bestätigt.
fib.c
#include <stdio.h>
// #define NOT_TAILRECUR
#ifdef NOT_TAILRECUR
unsigned long long fib(int x)
{
if (x == 0)
return (0);
else
if (x == 1)
return (1);
else
return (fib(x-1) + fib(x-2));
}
#else
unsigned long long fib_r(
int x,
unsigned long long a,
unsigned long long b)
{
if (x == 0)
return (a);
else
return (fib_r(x-1, b, a+b));
}
unsigned long long fib(int x)
{
return (fib_r(x, 0, 1));
}
#endif
int main(void)
{
for (int n = 0; n < 45; n++)
printf("%llu ", fib(n));
printf("\n");
return (0);
}
fib.py
#### not tail-recur
#def fib(x):
# if x == 0:
# return (0)
# elif x == 1:
# return (1)
# else:
# return (fib(x-1) + fib(x-2))
def fib(x):
def fib_r(x,a,b):
if x == 0:
return (a)
else:
return (fib_r(x-1, b, a+b))
return (fib_r(x,0,1))
for i in range(45):
print(fib(i), "", end="")
fib.scm
;;;; not tail-recur
;(define fib
; (lambda (x)
; (cond ((equal? x 0) 0)
; ((equal? x 1) 1)
; (else
; (+ (fib (- x 1)) (fib (- x 2)))))))
(define fib
(lambda (x)
(let loop ((x x) (a 0) (b 1))
(if (equal? x 0) a (loop (- x 1) b (+ a b))))))
(print (map fib (iota 45)))
Recommended Posts