1、若递归是尾递归,那利用循环就可以消除,尾递归是是在函数末尾递归调用本函数的方式,满足以下格式:
int function(int n){
if(n==0)
return 1;
else
return function(n-1);
}
尾递归采用循环,利用n=1的结果,定义一个变量记res记住,然后循环慢慢算n=2、3....的结果,每次计算出n的值后都让res记住,每次计算function的值利用res计算,下面给出计算一个例子
#include <stdio.h>
//递归的方法
int fib(int n)
{
if(n==1)
return 1;
if(n==0)
return 0;
else
return fib(n-1)+fib(n-2);
}
非递归的方法
int fib2(int n)
{
if(n==1)
return 1;
else if(n==0)
return 0;
int fib0=0;
int fib1=1;
int result=0;
for(int x=2;x<=10;x++)
{
result=fib0+fib1;
fib0=fib1;
fib1=result;
}
return result;
}
void main()
{
int a=fib(10);
int b=fib2(10);
printf("a的值是:%d\n",a);
printf("b的值是:%d\n",b);
}