自学嵌入式第十天 :函数调用及嵌套

函数调用

函数不支持嵌套定义但可以嵌套调用    
函数名————函数的入口地址

1.栈
栈是一种 数据结构(表示数组组织形式)
栈默认有8M的空间 可以通过命令和修改源代码更改空间大小
特点:
        1.先入后出 保证了函数的层层嵌套调用

        2.可以放变量(局部变量) 空间自动申请 自动释放

        3.从C语言角度的栈 本质上是一块内存空间,只是按照 栈 这种数据结构 来处理和使用的

C语言程序:
            把内存划分了5个区域:
    
1.栈                    主要存放 自动变量 或函数调用数据    
2.堆                    空间大   堆上的空间 手动申请 手动释放
3.字符串常量区        hello(只读)
4.静态区(全局区)    全局变量 和 静态变量
5.代码区                只读的

递归
 

递归:自己调用自己,是一种特殊嵌套;类似循环,是一种特殊的循环
递归思路:问题n的解决;依赖于问题n-1的解决

        个人总结: 程序书写时只需要写出第n项是如何得到的 其余部分(例如n-1)直接作为本函数的变量去做嵌套,切记变量一一对应

例如:编写程序,求a+aa+aaa+…+aa…a,其中a是一个数字。 例如:3+33+333+3333+33333(此时n为5)。 要求a和n从键盘输入, 输出格式为3+33+333+3333+33333=37035。

int num(int a,int n)
{
    if(n==1)
    {
        return 0;                    
    }
    else
    {
        return a + 10*num(a,n-1);
    }
}

int sum (int a,int n)
{
    if(n==1)
    {
        return num(a,n);
    }
    else
    {
        return num(a,n) + sum(a,n-1);
    }
}

每次下一个数出现都是前一个数 *10+a ;            

由此可得n=(n-1)*10+a;

因此返回值写为return (n-1)*10+a;

而n-1我们并不是我们关心的事

直接当作变量交给 所写函数num处理

因此把(n-1)写为 num(a,n-1)

(把难的事情交给电脑,我个人看来甩锅给电脑是应用递归的核心方法,我所写的这个函数就是用来算这个的;因此直接把除了最后一步的其他步骤交给我写的函数就好)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值