函数调用
函数不支持嵌套定义但可以嵌套调用
函数名————函数的入口地址
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)
(把难的事情交给电脑,我个人看来甩锅给电脑是应用递归的核心方法,我所写的这个函数就是用来算这个的;因此直接把除了最后一步的其他步骤交给我写的函数就好)