递归就是让函数中套用自己如下面代码红色部分,像剥洋葱一样让问题大化小(容易思考和实现)。但也存在栈区溢出strckoverflow的问题,与迭代(循环)各有好处。
//递归 和 非递归 分别实现求第n个斐波那契数
//例如:
//输入:5 输出:5
//输入:10, 输出:55
//输入:2, 输出:1
//递归
int Count(int i)
{
if (i <= 2)
{
return 1;
}
else
return Count(i - 1) + Count(i - 2);
}
int main()
{
int n = 0;
scanf("%d", &n);
int back = Count(n);
printf("%d\n", back);
return 0;
}
//非递归
int Count(int i)
{
if (i <= 2)
{
return 1;
}
int a = 1;
int b = 1;
int c = 1;
while (i >= 3)
{
c = a + b;
a = b;
b = c;
i--;
}
return c;
}
int main()
{
int n = 0;
scanf("%d", &n);
int back = Count(n);
printf("%d\n", back);
return 0;
}