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

/*
递归:
含义:直接用到自己或间接用到自己
优点:简洁+严密
注意:写递归终止条件
*/

/*
关键:
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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值