栈的作用:更加聚焦在需要关注的问题本身,不需要花精力在数组下标增减等问题
栈的应用——递归
递归:自己调用自己
迭代实现:
#include <stdio.h>
int main()
{
int i;
int a[40];
a[0] = 0;
a[1] = 1;
printf("%d", a[0]);
printf("\n");
printf("%d", a[1]);
printf("\n");
for (i = 2; i < 40; i++)
{
a[i] = a[i - 1] + a[i - 2];
printf("%d", a[i]);
printf("\n");
}
return 0;
}
斐波拉其数列的递归实现代码:
#include <stdio.h>
int Fbi(int i);
int main()
{
int i;
for (i = 0; i < 40; i++)
{
printf("%d", Fbi(i));
printf("\n");
}
return 0;
}
/*斐波拉其的递归函数*/
int Fbi(int i)
{
if (i < 2)
{
return i == 0 ? 0 : 1;
}
return Fbi(i - 1) + Fbi(i - 2);//自己调用自己
}
必须有一个条件,满足时递归不再进行
本例中调用Fbi时,虽然main函数是i++,但Fbi中是(i-1),(i-2),如果主函数i是20,在Fbi函数中会一次一次减到i<2,然后跳出递归,返回值。
递归会建立函数副本,会耗费大量时间和内存。
递归是由果索因,倒推式
和栈非常类似,后入先出
下节预告:
栈的应用——四则运算表达式求值