第11章对函数的进一步讨论.pptVIP

  • 2
  • 0
  • 约5.34千字
  • 约 32页
  • 2017-05-29 发布于北京
  • 举报
* * * * * * * * * * * * * C语言程序设计 在main函数第二次调用时,改以函数名min 作实参,此时process函数的形参fun 指向函数min , 在process函数中的函数调用(*fun) ( x , y )相当于min ( x , y )。同理,第三次调用process函数时,(*fun) ( x , y )相当于add ( x , y )。从本例可以清楚地看到,不论执行max 、min或add ,函数process 一点都没有改动,只是在调用process函数时实参函数名改变而已。这就增加了函数使用的灵活性。 * * C语言程序设计 第三节 函数的递归调用 递归调用是指一个函数直接或间接地调用自己。这种函数称为递归函数。自己调用自己,即要解决一个问题,转化为一个用同样的方法解决的新问题,只是参数在不断地递增或者递减。 在递归调用中,主调函数又是被调函数。执行递归函数将反复调用其自身。 对于一些特定的问题,用递归算法来解决,可以简化问题的复杂程度。 * * C语言程序设计 例:用递归调用求n!。 要用递归法解决此问题,必须明确两个问题: ①、递归算法 n!=n*(n-1)! (n-1)!=(n-1)*(n-2)!; 求n的阶乘的问题,转化为用同样的方法求(n-1)的阶乘。 如:4!=4*3! 3!=3*2! 如果编写成一个函数,则调用如下: f(n)=n*f(n-1); 不断地自己调用自己。 * * C语言程序设计 ②、递归终结条件 递归到一定的程度后,必须终止。 如求阶乘时,当求到1!时,必须停止递归。 f(1)=1 这一条是必须的,否则将会没完没了的进行下去。 通常用条件判断, 满足某种条件后就不再作递归调用,然后逐层返回。 * * C语言程序设计 例如有函数f如下: int f (int x) { z=f(x-1); return z; } 上页中的函数是一个递归函数。 但是运行该函数将无休止地调用其自身,这当然是不正确的。为了防止递归调用无终止地进行, 必须在函数内有终止递归调用的手段。 * * C语言程序设计 [例] 用递归法计算n!。 #include stdio.h long f(int n) { long y; if(n1) y=n*f(n-1); else y=1; return(y); } * * C语言程序设计 main() { int n; long y; printf(“input a inteager number:”); scanf(%d,n); y=f(n); printf(%d!=%ld\n,n,y); } 程序运行情况如下: input a inteager number: 5 CR 5!=120 * * C语言程序设计 程序说明: 程序中给出的函数f是一个递归函数。主函数调用f 后即进入函数f执行,如果n0,n==0或n=1时都将结束函数的执行,否则就递归调用f函数自身。由于每次递归调用的实参为n-1,即把n-1 的值赋予形参n,最后当n-1的值为1时再作递归调用,形参n的值也为1,将使递归终止。然后可逐层退回。 * * C语言程序设计 如求4!的过程分解如下: f(4) =4*f(3) f(3) =3*f(2) f(2) =2*f(1) f(1) =1 f(4) =4*6=24 f(3) =3*2=6 f(2) =2*1=2 * * C语言程序设计 例:用递归法求菲波那契数列第40项的值,刻数列为:1,1,2,3,5,8,13,21,………… 规律:每一项为其前两项的和。 递归算法如下: fib(n)=fib(n-1)+fib(n-1); 递归的终结条件如下: fib(1)=1; fib(2)=1; * * C语言程序设计 #include stdio.h main() { int n; long fib(int); /*第40项的值很大*/ printf(“请输入项数:”); scanf(“%d”,n); printf(“第%d项的值为:%ld\n”,n,fib(n)); } * * C语言程序设计 long fib(int n) { long result; if(n==1||n==2) result=1; else result=fib(n-1)+fib(n-2); return result; } * * * * * * * * * * * * * * * * * * * * 第十一章 对函数的进一步讨论 主讲人:韩维良 * * C语言程序设计 第一节 main函数的参数 在以前所编写的程序中,main函数的首部都是如: main ( ) 括号中为空,表示没有参数。实际上main

文档评论(0)

1亿VIP精品文档

相关文档