2018.10.31 遞迴演算法總結
阿新 • • 發佈:2018-11-02
///十進位制轉二進位制 void dectobin( int n ) { if(n==0) return; dectobin(n/2); printf("%d",n%2); } ///遞迴求斐波那契數列 int fib(int n) { if(n==1 || n==2) return 1; return fib(n-1)+fib(n-2); } ///遞迴求斐波那契數列,打表法 int a[47]; int fib(int n) { if(n==1 || n==2) return a[1]=a[2]=1; if(!a[n]) { return a[n]=fib(n-1)+fib(n-2); } else return a[n]; } //////尾遞迴求斐波那契數列, ///ret1是斐波那契數列的第一項,ret2為第二項 int fibTR(int n,int ret1,int ret2) { if(n==1) return ret1; return fibTR(n-1,ret2,ret1+ret2); } ///尾遞迴求n的階乘 ///a儲存從後往前的乘積 int factTR(int n,int a) { if(n==0 || n==1) return a; return factTR(n-1,n*a); } int main(int argc, char const *argv[]) { int n; while (scanf("%d", &n) != EOF) { printf("%d\n", factTR(n,1)); } return 0; }