递归函数的原理

原创 2012年04月10日 11:32:42

1.      函数定义:就是函数体的实现。函数体就是一个代码块,它在函数被调用时执行。

函数声明:向编译器提供该函数的相关的信息,包括:参数的数量,每个参数的类型以及返回值的类型。用于函数被正确的调用。

【注意】:当一个函数被调用时,编译器如果无法看到它的任何声明,那么它就假定函数返回一个整型值。对于那些返回值不是整型的函数,在调用之前对它们进行声明是非常重要的,这可以避免由于不可预测的类型转换而导致的错误。对于那些没有原型的函数,传递给函数的实参将进行缺省参数提升:char和short类型的实参被转换为int类型,float转换为double类型。

 

运行结果:25

2.      向编译器提供函数特定信息的方法有两种。第一种:将函数的定义放在源文件的前面。

                                                                                      第二种:提供函数原型。

3.      整型常量转换字符常量方法如下:

0 + ‘0’ = ‘0’

1 + ‘0’ = ‘1’

4.      递归本质的讲解:

例如:给出一个值4267, 我们需要依次产生字符‘4’, ‘2’, ‘6’, ‘7’.


分析递归的工作原理:

第一步:当函数刚开始执行时,堆栈的内容如下:


第二步:执行除法运算之后,堆栈的内容如下:


第三步:接着,if语句判断出p的值非零,所以对该函数执行递归调用。当这个函数第二次被调用之初,堆栈内容如下:


第四步:堆栈上创建了新的变量,隐藏了前面的那批变量,除非当前这次递归调用返回,否则它们是不能被访问的,再次执行除法运算之后,堆栈的内容如下:


第五步:m的值现在为42,仍然非零,所以继续执行递归调用,并再创建一批变量。在执行完这次调用的除法运算之后,堆栈的内容如下:


第六步:此时,m的值还是非零,继续执行递归调用。在执行除法运算之后,堆栈内容如下:


第七步:现在m的值为零,递归函数不再调用自身,而开始打印输出。然后函数返回,并开始销毁堆栈上的变量值。每次调用putchar得到的变量m的最后一个数字,并对m进行模10取余运算,将它与字符常量’0’相加,并输出结果。

输出结果:4

第八步:接着函数返回,它的变量从堆栈中销毁。接着,递归函数的前一次调用重新继续执行,它使用的是自己变量,它们位于堆栈的顶部。因为它的m值是42,所以调用putchar后打印出来的数字是2.

输出结果:42

输出结果:426

输出结果:4267

递归函数在栈内的执行过程:







递归函数工作原理

递归(recursion)就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的基本方法。       递归通常用来解决结构自相似的问题。所谓结构自相似,是指...
  • zhangchao3322218
  • zhangchao3322218
  • 2011-09-29 19:39:02
  • 11982

递归算法的原理

递归算法:顾名思义,递和归;其实际也是根据栈的原理,后进先出,保证函数的返回值正确; 就拿斐波那契数列进行举例说明: 斐波那契数列算法,如:1,1,2,3,5,8,13,21…… ...
  • crazyliyang
  • crazyliyang
  • 2017-06-19 17:17:15
  • 1016

Java中的递归原理分析

参加工作已经三四年了,再回头来看这些很基础的东西,觉得理解又深入了一层! 解释:程序调用自身的编程技巧叫做递归。 程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设...
  • it_wangxiangpan
  • it_wangxiangpan
  • 2013-01-08 01:26:18
  • 22743

递归和尾递归的区别和原理

注意哦,这里尾递归其实还用了一个重载,然后尾递归调用,其实最精髓就是 通过参数传递结果,达到不压栈的目的。C中玩好了尾递归,代码可以很秀。递归,就是在运行的过程中调用自己。构成递归需具备的条件: 1....
  • zcyzsy
  • zcyzsy
  • 2017-08-14 00:08:07
  • 4157

递归的工作原理

理解递归的工作原理     为了理解递归的工作原理,你需要追踪递归调用的执行过程,所以让我们来进行这项...
  • hephec
  • hephec
  • 2014-08-11 00:09:58
  • 1777

详细讲解递归的原理

  • 2012年04月11日 09:19
  • 4.82MB
  • 下载

递归的原理和分析

递归作为一种程序设计中使用频繁的思想和方法,熟话说就是自己调用自己,不仅方便灵活,而且可以简化代码。递归的实现在很大程度上归功于栈的机制,因为函数在每次执行时都从栈上获得了它的形参的私有副本和局部变量...
  • kezunhai
  • kezunhai
  • 2013-06-29 12:10:45
  • 1175

关于递归原理

刚刚在看到function 的属性arguments实现递归方法,但一直接不明白递归的原理,查了资料,如下 function ar(nums)    {   if(nums   { ret...
  • swanhung
  • swanhung
  • 2012-06-19 12:00:56
  • 1061

递归的基本原理

看《算法笔记》到递归了,遇到稍稍复杂一点的递归就会昏头。查阅资料发现大神们推崇《The Little Schemer》和《SCIP计算机程序的构造和解释》这两本书,第一本貌似不太厚,但是只有全英版本,...
  • Daniel960601
  • Daniel960601
  • 2017-03-09 20:35:52
  • 1419

浅析递归算法的运行原理

递归,即程序(函数)通过直接或者间接调用自己的一个过程。 递归算法主要有四个特点: 1. 必须有可达到的终止条件,不然程序(函数)将陷入死循环(死锁); 2. 子过程可通过再次递归的方式调用求解或...
  • oooyou
  • oooyou
  • 2017-03-17 20:58:01
  • 1181
收藏助手
不良信息举报
您举报文章:递归函数的原理
举报原因:
原因补充:

(最多只允许输入30个字)