函数的递归调用,你 学会了嘛?

在调用一个函数的过程中出现直接调用和间接调用该函数,称为函数的递归调用,这是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。

那么,递归思想的最根本是如何做到的呢?

递归入栈图解:
在这里插入图片描述
递归出栈图解:
在这里插入图片描述

看完图示,你有没有弄明白递归的概念?
希望对你有所帮助。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值