递归;是函数自调用,无循环
迭代;是靠循环语句,无自调
但递归也不是都能解决问题,当递归调用深度持续加深会造成栈溢出
解决方法;递归转迭代(优选),将存栈区转到存静态区(static)会节省一定的空间但治标不治本多了还会溢出
#include<stdio.h>
//递归阶乘
/*int str(int n)
{
if(n<=1)
return 1;
else
return n*str(n-1);
}*/
//迭代方式-非递归
/* int str(int n)
{
int i=0;
int ret=1;
for(i=1;i<=n;i++)
{
ret*=i;
}
return ret;
}
int main()
{
int a=0;
scanf("%d",&a);
int r=str(a);
printf("%d",r);
return 0;
} */
//斐波那契数列-递归
//1、1、2、3、5、8、13、21
//fib(n-1)+fib(n-2)
/*int count=0;
int str(int n)
{
if(n==3)
count++;//n越大,递归的次数越多
if(n>2)
return str(n-2)+str(n-1);
else
return 1;
} */
int str(int n)//这个虽然不会溢出但是n越大,结果不准确
{
int c=1;
int b=1;
int w=1;
while(n>=3)
{
w=c+b;
c=b;
b=w;
n–;
}
}
int main()
{
char a=0;
scanf("%d",&a);
int r=str(a);
printf("%d\\n",r);
//printf("%d",count);
return 0;
}


