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);

}