- 13
- 0
- 约1.8万字
- 约 82页
- 2017-01-16 发布于河南
- 举报
这天是第几天? void main( ) { int dpm[13]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, y, m, d, n, i; scanf (“%d%d%d”, y, m, d); if (y%4==0y%100!=0||y%400==0) dpm[2]=29; if (m1||d1||m12||dpm[m]d) printf(“Input error!\n”); else { for( i=0, n=d; im; i++) n=n+dpm[i]; printf (“n=%d\n”, n); } } 8.3 递归函数 函数定义都是相互独立的,即函数不能嵌套定义。 函数可以嵌套调用,即在调用一个函数的过程中,又可以调用另一个函数。 如果在调用一个函数过程中调用的是自己,则称为递归调用,该函数即是递归函数。 递归调用分直接递归和间接递归两种。 1. 递归函数的定义 int fun(int x) { int y,z; …… z=fun(y); } int funA(int x) { int y,z; …… z=funB(y); } int funB(int x) { int y,z; …… z=funA(y); } 递归 递归是一种常用的程序设计技术,在一程序中,若存在程序自己调用自己的现象就构成了递归。 如果函数funA在执行过程又调用函数funA自己,则称函数funA为直接递归。 如果函数funA在执行过程中先调用函数funB,函数funB在执行过程中又调用函数funA,则称函数funA为间接递归。 函数调用的执行过程 main () 调fun() 结束 fun() 返回 ① ② ④ ⑥ ⑦ 保存: 返回地址 当前现场 ③ 恢复: 主调程序现场 返回地址 ⑤ 嵌套调用 fun1() 调fun2() 返回 fun2 () 返回 ① ② ③ ⑦ ④ ⑤ ⑥ ⑧ ⑨ main() 2. 递归函数程序设计 例: 求n! 分析:计算n!的公式如下: 这是一个递归形式的公式,应该用递归函数实现。 #include stdio.h long fac(int n){ long f; if (n==1||n==0) f=1; else f= fac(n-1) * n; return (f); } void main( ){ long fac(int n); int n; long y; printf(“Enter a positive integer:\n”); scanf(“%d”, n); y= fac(n); printf(“%d!=%ld\n”, n, y); } 递归过程的两个阶段: 递推: 4!=4×3! → 3!=3×2! → 2!=2×1! → 1!=1×0! → 0!=1 未知 已知 回归: 4!=4×3!=24←3!=3×2!=6←2!=2×1!=2←1!=1×0!=1←0!=1 未知 已知 主函数 第一次调用 第二次 第三次 第四次 n=4 y=fac(4) 调用└─→ n=4 f=4*fac(3) 调用└─→ n=3 f=3*fac(2) 调用└─→ n=2 f=2*fac(1) └─→ n=1 return (1)
您可能关注的文档
最近下载
- 人教版五年级语文(下册)写字表课文同步正楷练字帖.pdf VIP
- 家谱发放仪式上的讲话范文(3篇).docx VIP
- 塔吊拆除作业安全培训内容课件.pptx VIP
- SYT 5328-2019 石油天然气钻采设备 热采井口装置.docx VIP
- 肖邦升C小调幻想即兴曲(Op.66)(原版) 高清钢琴谱五线谱.docx VIP
- 高技术船舶科研项目指南(2024年).pdf VIP
- 全国大学生市场调查与分析大赛调查研究报告.PDF VIP
- 中北大学2023-2024学年第1学期《高等数学(上)》期末考试试卷(B卷)附参考答案.pdf
- 产前检查ppt课件图文.pptx VIP
- 精品解析:重庆市万州二中教育集团2025-2026学年八年级上学期期中物理试题(原卷版).docx VIP
原创力文档

文档评论(0)