在调用一个函数的过程中出现直接调用和间接调用该函数,称为函数的递归调用,这是C语言的一个特点。
#include <stdio.h>
int Age1(int n) //O(n)
{
int age = 10;
for(int i=1;i<n;i++)
{
age += 2;
}
return age;
}
int Age(int n)//O(n),O(n)
{
int tmp;
if(n == 1)
{
return 10;
}
else
tmp = Age(n-1) + 2;
return tmp;
}
//Age(1):第一个人的年龄;
//Age(2):第二个人的年龄;
//Age(3):第三个人的年龄;
//Age(4):第四个人的年龄;
//Age(n-1):第n-1个人的年龄;
//Age(n):第n个人的年龄;
显然这是一个递归问题,当n>1时,求第n个学生的年龄的公示是相同的,因此可以用一个函数表示!也就是说递归有“回溯”和“递推”两个过程。我的理解就是把一个复杂重复的过程例如求前n项和用类似等比等差求和公示变得直接简明。需要注意的是求递归的过程不是无限制的进行,而是有一个结束递归过程的条件,例如:age(1)=10。
那么,递归思想的最根本是如何做到的呢?
递归入栈图解:
递归出栈图解:
看完图示,你有没有弄明白递归的概念?
希望对你有所帮助。