1. 程式人生 > >2018.10.31 遞迴演算法總結

2018.10.31 遞迴演算法總結

///十進位制轉二進位制
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;
}