<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="generator" content="pdf2htmlEX">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" href="https://static.pudn.com/base/css/base.min.css">
<link rel="stylesheet" href="https://static.pudn.com/base/css/fancy.min.css">
<link rel="stylesheet" href="https://static.pudn.com/prod/directory_preview_static/6279c4e4d7996104df969a03/raw.css">
<script src="https://static.pudn.com/base/js/compatibility.min.js"></script>
<script src="https://static.pudn.com/base/js/pdf2htmlEX.min.js"></script>
<script>
try{
pdf2htmlEX.defaultViewer = new pdf2htmlEX.Viewer({});
}catch(e){}
</script>
<title></title>
</head>
<body>
<div id="sidebar" style="display: none">
<div id="outline">
</div>
</div>
<div id="pf1" class="pf w0 h0" data-page-no="1"><div class="pc pc1 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/6279c4e4d7996104df969a03/bg1.jpg"><div class="c x0 y1 w2 h2"><div class="t m0 x1 h3 y2 ff1 fs0 fc0 sc0 ls0 ws0">第六章 函数和递推递归算法</div></div></div><div class="pi" data-data='{"ctm":[1.333333,0.000000,0.000000,1.333333,0.000000,0.000000]}'></div></div>
</body>
</html>
<div id="pf2" class="pf w0 h0" data-page-no="2"><div class="pc pc2 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/6279c4e4d7996104df969a03/bg2.jpg"><div class="c x0 y1 w2 h2"><div class="t m0 x2 h4 y3 ff1 fs1 fc0 sc0 ls0 ws0">第一节 函数</div><div class="t m0 x3 h4 y4 ff1 fs1 fc0 sc0 ls0 ws0">第二节 递推算法</div><div class="t m0 x3 h4 y5 ff1 fs1 fc0 sc0 ls0 ws0">第三节 递归算法</div></div></div><div class="pi" data-data='{"ctm":[1.333333,0.000000,0.000000,1.333333,0.000000,0.000000]}'></div></div>
<div id="pf3" class="pf w0 h0" data-page-no="3"><div class="pc pc3 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/6279c4e4d7996104df969a03/bg3.jpg"><div class="c x0 y1 w2 h2"><div class="t m0 x4 h5 y6 ff1 fs2 fc1 sc0 ls0 ws0"> <span class="_ _0"> </span><span class="fc2">前面我们曾经学习了程<span class="_ _1"></span>序设计中的三种基本控<span class="_ _1"></span>制结构(顺序、分</span></div><div class="t m0 x4 h5 y7 ff1 fs2 fc2 sc0 ls0 ws0">支、循环)。用它们可<span class="_ _1"></span>以组成任何程序。但在<span class="_ _1"></span>应用中,还经常用到子</div><div class="t m0 x4 h5 y8 ff1 fs2 fc2 sc0 ls0 ws0">程序结构。</div><div class="t m0 x4 h5 y9 ff1 fs2 fc2 sc0 ls0 ws0"> <span class="_ _0"> </span>通常,在程序设计中,<span class="_ _1"></span>我们会发现一些程序段<span class="_ _1"></span>在程序的不同地方</div><div class="t m0 x4 h5 ya ff1 fs2 fc2 sc0 ls0 ws0">反复出现,此时可以将<span class="_ _1"></span>这些程序段作为相对独<span class="_ _1"></span>立的整体,用一个标识</div><div class="t m0 x4 h5 yb ff1 fs2 fc2 sc0 ls0 ws0">符给它起一个名字,凡<span class="_ _1"></span>是程序中出现该程序段<span class="_ _1"></span>的地方,只要简单地写</div><div class="t m0 x4 h5 yc ff1 fs2 fc2 sc0 ls0 ws0">上其标识符即可。这样<span class="_ _1"></span>的程序段,我们称之为<span class="_ _1"></span>子程序。</div><div class="t m0 x4 h5 yd ff1 fs2 fc2 sc0 ls0 ws0"> <span class="_ _0"> </span>子程序的使用不仅缩短<span class="_ _1"></span>了程序,节省了内存空<span class="_ _1"></span>间及减少了程序的</div><div class="t m0 x4 h5 ye ff1 fs2 fc2 sc0 ls0 ws0">编译时间,而且有利于<span class="_ _1"></span>结构化程序设计。因为<span class="_ _1"></span>一个复杂的问题总可将</div><div class="t m0 x4 h5 yf ff1 fs2 fc2 sc0 ls0 ws0">其分解成若干个子问题<span class="_ _1"></span>来解决,如果子问题依<span class="_ _1"></span>然很复杂,还可以将它</div><div class="t m0 x4 h5 y10 ff1 fs2 fc2 sc0 ls0 ws0">继续分解,直到每个子<span class="_ _1"></span>问题都是一个具有独立<span class="_ _1"></span>任务的模块。这样编制</div><div class="t m0 x4 h5 y11 ff1 fs2 fc2 sc0 ls0 ws0">的程序结构清晰,逻辑<span class="_ _1"></span>关系明确,无论是编写<span class="_ _1"></span>、阅读、调试还是修改</div><div class="t m0 x4 h5 y12 ff1 fs2 fc2 sc0 ls0 ws0">,都会带来极大的好处<span class="_ _1"></span>。</div><div class="t m0 x4 h5 y13 ff1 fs2 fc2 sc0 ls0 ws0"> <span class="_ _0"> </span>在一个程序中可以只有<span class="_ _1"></span>主程序而没有子程序<span class="_ _0"> </span>(<span class="_ _0"> </span>本章以前都是如<span class="_ _1"></span>此<span class="_ _0"> </span>)</div><div class="t m0 x4 h5 y14 ff1 fs2 fc2 sc0 ls0 ws0">,但不能没有主程序,<span class="_ _1"></span>也就是说不能单独执行<span class="_ _1"></span>子程序。</div><div class="t m0 x4 h5 y15 ff1 fs2 fc2 sc0 ls0 ws0"> <span class="_ _0"> </span>在此之前,我们曾经介<span class="_ _1"></span>绍并使用了<span class="_ _0"> </span>C++<span class="_ _0"> </span>提供的各种标准函数,如</div><div class="t m0 x4 h5 y16 ff1 fs2 fc2 sc0 ls0 ws0">abs(),sqrt()<span class="_ _0"> </span>等等,这些<span class="_ _1"></span>系统提供的函数为我们<span class="_ _1"></span>编写程序提供了很大的</div><div class="t m0 x4 h5 y17 ff1 fs2 fc2 sc0 ls0 ws0">方便。比如:求<span class="_ _0"> </span>sin(1)+ sin(2)+<span class="_ _2"> </span>...<span class="_ _0"> </span>+sin(100)<span class="_ _0"> </span>的值。但这<span class="_ _1"></span>些函数</div><div class="t m0 x4 h5 y18 ff1 fs2 fc2 sc0 ls0 ws0">只是常用的基本函数,<span class="_ _1"></span>编程时经常需要自定义<span class="_ _1"></span>一些函数。</div><div class="t m0 x5 h6 y19 ff1 fs3 fc0 sc0 ls0 ws0">第一节 函数</div></div></div><div class="pi" data-data='{"ctm":[1.333333,0.000000,0.000000,1.333333,0.000000,0.000000]}'></div></div>
<div id="pf4" class="pf w0 h0" data-page-no="4"><div class="pc pc4 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/6279c4e4d7996104df969a03/bg4.jpg"><div class="c x0 y1 w2 h2"><div class="t m0 x6 h5 y1a ff1 fs2 fc0 sc0 ls0 ws0">例<span class="_ _0"> </span>6.1<span class="fc1"> <span class="_ _0"> </span><span class="fc2">求:<span class="_ _0"> </span>1!+2!+3!+……+10<span class="_ _0"> </span>!</span></span></div><div class="t m0 x6 h7 y1b ff2 fs4 fc2 sc0 ls0 ws0">#include<iostream> </div><div class="t m0 x6 h7 y1c ff2 fs4 fc2 sc0 ls0 ws0">using namespace <span class="_ _1"></span>std; </div><div class="t m0 x6 h7 y1d ff2 fs4 fc2 sc0 ls0 ws0">int main() </div><div class="t m0 x6 h7 y1e ff2 fs4 fc2 sc0 ls0 ws0">{ </div><div class="t m0 x6 h7 y1f ff2 fs4 fc2 sc0 ls0 ws0"> in<span class="_ _1"></span>t sum=0; </div><div class="t m0 x6 h7 y20 ff2 fs4 fc2 sc0 ls0 ws0"> <span class="_ _3"> </span> <span class="_ _4"> </span>for (int i=1; i<=10; i++) </div><div class="t m0 x6 h7 y21 ff2 fs4 fc2 sc0 ls0 ws0"> <span class="_ _3"> </span> <span class="_ _3"> </span> <span class="_ _3"> </span> <span class="_ _4"> </span>sum+=js(i); </div><div class="t m0 x6 h7 y22 ff2 fs4 fc2 sc0 ls0 ws0"> <span class="_ _3"> </span> <span class="_ _4"> </span>cout<<"sum="<<sum<<<span class="_ _5"></span>endl; </div><div class="t m0 x6 h7 yc ff2 fs4 fc2 sc0 ls0 ws0"> <span class="_ _3"> </span> <span class="_ _4"> </span>return 0;</div><div class="t m0 x6 h7 y23 ff2 fs4 fc2 sc0 ls0 ws0">} </div><div class="t m0 x6 h5 y24 ff1 fs2 fc2 sc0 ls0 ws0"> <span class="_ _0"> </span>现在的问题是:<span class="_ _0"> </span>C++<span class="_ _0"> </span>不提供<span class="_ _0"> </span>js(x)<span class="_ _0"> </span>这样一个标准<span class="_ _1"></span>函数,这个程序是</div><div class="t m0 x6 h5 y25 ff1 fs2 fc2 sc0 ls0 ws0">通不过的。如果是<span class="_ _0"> </span>C++<span class="_ _0"> </span>的标准函数,我们<span class="_ _1"></span>可以直接调用,如<span class="_ _0"> </span>abs(x)</div><div class="t m0 x6 h5 y26 ff1 fs2 fc2 sc0 ls0 ws0">,<span class="_ _0"> </span>sqrt(x)<span class="_ _0"> </span>......而<span class="_ _0"> </span>C++<span class="_ _0"> </span>提供给我们的可供直接调<span class="_ _1"></span>用的标准函</div><div class="t m0 x6 h5 y27 ff1 fs2 fc2 sc0 ls0 ws0">数不多。没关系,我们<span class="_ _1"></span>编写自己的函数!</div></div></div><div class="pi" data-data='{"ctm":[1.333333,0.000000,0.000000,1.333333,0.000000,0.000000]}'></div></div>
<div id="pf5" class="pf w0 h0" data-page-no="5"><div class="pc pc5 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/6279c4e4d7996104df969a03/bg5.jpg"><div class="c x0 y1 w2 h2"><div class="t m0 x7 h8 y28 ff1 fs5 fc0 sc0 ls0 ws0">一、函数的定义<span class="_ _6"> </span><span class="ff2">----<span class="_ _6"> </span></span>【函数】</div><div class="t m0 x7 h9 y29 ff3 fs6 fc0 sc0 ls0 ws0">•</div><div class="t m0 x8 ha y2a ff1 fs6 fc0 sc1 ls0 ws0">1.<span class="_ _7"> </span>函数定义的<span class="_ _1"></span>语法形式</div><div class="t m0 x8 ha y2b ff1 fs6 fc2 sc0 ls0 ws0">数据类型 函<span class="_ _1"></span>数名(形<span class="_ _1"></span>式参数表)</div><div class="t m0 x8 ha y2c ff1 fs6 fc2 sc0 ls0 ws0">{</div><div class="t m0 x8 ha y2d ff1 fs6 fc2 sc0 ls0 ws0">函数体 <span class="_ _1"></span> <span class="_ _7"> </span>//<span class="_ _8"> </span>执行语句</div><div class="t m0 x8 ha y2e ff1 fs6 fc2 sc0 ls0 ws0">}</div><div class="t m0 x7 ha y2f ff1 fs6 fc0 sc1 ls0 ws0">关于函数的<span class="_ _1"></span>定义有如下<span class="_ _1"></span>说明:</div><div class="t m0 x7 hb y30 ff4 fs6 fc2 sc0 ls0 ws0"></div><div class="t m0 x8 ha y31 ff1 fs6 fc2 sc0 ls0 ws0">函数的数据<span class="_ _1"></span>类型是函数<span class="_ _1"></span>的返回值类型<span class="_ _1"></span>(若数据类<span class="_ _1"></span>型为 <span class="_ _0"> </span>void ,<span class="_ _7"> </span>则无返<span class="_ _1"></span>回值)</div><div class="t m0 x8 ha y32 ff1 fs6 fc2 sc0 ls0 ws0">。</div><div class="t m0 x7 hb y33 ff4 fs6 fc2 sc0 ls0 ws0"></div><div class="t m0 x8 hc y34 ff1 fs6 fc2 sc0 ls0 ws0">函数名是标<span class="_ _1"></span>识符,一个<span class="_ _1"></span>程序中除了主<span class="_ _1"></span>函数名必须<span class="_ _1"></span>为<span class="_ _8"> </span><span class="ff5">m</span>a<span class="_ _1"></span>in<span class="_ _7"> </span><span class="ff5">外</span>,其<span class="_ _1"></span><span class="ff5">余</span>函数的<span class="_ _1"></span>名</div><div class="t m0 x8 hc y35 ff1 fs6 fc2 sc0 ls0 ws0">字<span class="ff5">按照</span>标<span class="_ _1"></span>识符的<span class="_ _1"></span><span class="ff5">取</span>名<span class="ff5">规</span>则<span class="_ _1"></span>可以任<span class="ff5">意<span class="_ _1"></span>选取</span>,<span class="ff5">最<span class="_ _1"></span></span>好<span class="ff5">取</span>有<span class="_ _1"></span><span class="ff5">助</span>于<span class="ff5">记忆<span class="_ _1"></span></span>的名字。</div><div class="t m0 x7 hb y36 ff4 fs6 fc2 sc0 ls0 ws0"></div><div class="t m0 x8 hc y37 ff1 fs6 fc2 sc0 ls0 ws0">形式参数(<span class="_ _1"></span>简称形参)<span class="_ _1"></span>表可以是空的<span class="_ _1"></span>(即无参函<span class="_ _1"></span>数)<span class="_ _9"></span><span class="ff5">;</span>也可<span class="_ _1"></span>以有多个形参</div><div class="t m0 x8 hc y38 ff1 fs6 fc2 sc0 ls0 ws0">,形参间用<span class="_ _1"></span><span class="ff5">逗号<span class="_ _1"></span>隔开</span>,不<span class="_ _1"></span><span class="ff5">管</span>有无参数<span class="_ _1"></span>,函数名<span class="_ _1"></span><span class="ff5">后</span>的<span class="_ _1"></span><span class="ff5">圆括号</span>都必须<span class="_ _1"></span>有。形参</div><div class="t m0 x8 hc y39 ff1 fs6 fc2 sc0 ls0 ws0">必须有类型<span class="_ _1"></span>说明,形参<span class="_ _1"></span>可以是<span class="_ _1"></span><span class="ff5">变量<span class="_ _1"></span></span>名、数组名<span class="_ _1"></span><span class="ff5">或指针<span class="_ _1"></span></span>名,它的作用<span class="_ _1"></span>是<span class="ff5">实<span class="_ _1"></span></span>现</div><div class="t m0 x8 hc y3a ff1 fs6 fc2 sc0 ls0 ws0">主调函数<span class="_ _1"></span><span class="ff5">与被</span>调<span class="_ _1"></span>函数之间的关<span class="_ _1"></span>系,通常将函<span class="_ _1"></span>数<span class="_ _1"></span><span class="ff5">所</span>处<span class="_ _1"></span><span class="ff5">理</span>的</div></div></div><div class="pi" data-data='{"ctm":[1.333333,0.000000,0.000000,1.333333,0.000000,0.000000]}'></div></div>