函数递归是函数自己调用自己。
内存包括栈区,堆区,和静态区。
栈区如果引用函数过多,会栈溢出,栈区里面放的都是一些临时的变量,包括局部变量函数形参。每一次函数调用,需要在栈区分配一定的空间
堆区是动态内存分配相关的。
静态区里面存放了全局变量和静态变量。
写递归代码的时候
- 不能一直递归,需要有跳出条件,每次逼近跳出条件。
- 递归层次不能太深,(防止栈溢出)
一、输入1234正序输出1 2 3 4
首先将这一个问题分成小问题,每次都是相同的步骤,直到满足条件。此题中将
1234%10=4,1234/10=123
123%10=3,123/10=12
12%10=2,12/10=1
1%10=1
一小于九,所以说不再将其/10
#include <stdio.h>
int print(int n)
{
if(n>9)
{
print(n/10);
}
printf("%d ",n%10);
}
int main()
{
int num;
scanf("%d",&num);
print(num);
return 0;
}
二、斐波那契数列(求第几个数,但这个数不能太大)
1,1,2,3,5…
从第三个数开始,前两个数的和是下一个数,f(n)=f(n-1)+f(n-2) (n>=3) f(1)=1=f(2)
#include <stdio.h>
int print(int n)
{
if(n>=3)
{
return print(n-1)+print(n-2);
}
return 1;
}
int main()
{
int num;
scanf("%d",&num);
int ret= print(num);
printf("%d",ret);
return 0;
}
本人是小白,如有错误,会不断改正