您的位置:首页 > 其它

算法竞赛入门经典: 第四章 函数与递归 4.5递归

2015-08-11 11:00 323 查看
/*
递归:
含义:直接用到自己或间接用到自己
优点:简洁+严密
注意:写递归终止条件
*/

/*
关键:
1调用栈中,#0 #1都是从最内层被调函数到外层主调函数的过程
2调用栈:描述函数调用关系,组成:栈帧,栈帧:表示未运行完函数
3递归过程:建立新栈帧,传参,修改当前代码行,删栈帧,修改当前代码行。同一时刻栈帧多个,当前代码行一个
4凡是和递归有关,全给我用long。设计递归是为了给下级安排工作
5可执行文件中:正文段:存指令,数据段:存全局变量,BSS段:存未赋值全局变量所需空间
6堆栈段:调用栈所在的段,每次递归调用需要往调用栈里增加栈帧,不久越界。windows:栈大小在可执行程序中,linux:unlimit -a:显示栈大小
7局部变量放在栈里,栈溢出原因:1局部变量大,2递归调用多
*/
#include <stdio.h>
#include <stdlib.h>

long recursion(int n)
{
	return n == 0 ? 1 : recursion(n-1)*n;//返回的值留给下一次递归使用
}

int main(int argc,char* argv[])
{
	int n;
	scanf("%d",&n);
	printf("%ld\n",recursion(n));
	system("pause");
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: