一、先举2个栗子:
(1)阶乘
阶乘的一般递归 int factorial(int n){ if(n<=1) return 1; return (n*factorial(n-1)); } 阶乘的尾递归 int factorial_tail(int n,int res){ if(n<=1) return res; return factorial_tail(n-1,n*res); } 阶乘的迭代形式 int factorial_loop(int n){ int r=1; for(int i=1;i<=n;i++){ r=r*i; return r; }
(2)斐波那契数列递归
1.
斐波那契数列的一般递归 int fibonacci(int n){ if(n<=3) return 1; else{ return fibonacci(n-1)+fibonacci(n-2); } } 斐波那契数列的尾递归 int fibonacci_tail(int n,int acc1,int acc2){ if(n<2) return acc1; else return fibonacci(n-1,acc2,acc1+acc2); } } 斐波那契数列的循环递归 int fibonacci_loop(int n){ int a=0; int b=1; if(n==1) return 1; if(n==2) return 1; for(int i=3;i<=n;i++){ int temp=a+b; a=b; b=temp; } return b; }