函数的递归调用
2017-12-11 09:06
176 查看
函数的递归调用
标签(空格分隔): 双学位高级语言程序设计 C C函数在函数中直接或间接的调用自己,就称为递归调用
看下面这个求阶乘的例子
求n的阶乘,数学函数形式是这样的
{1 n=0,1
n!={
{n*(n-1)! n>=2
#include <stdio.h> long Fact(int n) { if (n <0) return -1; else if (n==0 || n==1) return 1; else return n*Fact(n-1); }
在这个函数调用时,就用到了递归调用。是不是想到了了数学归纳法?
递归调用的格式如下
if (基本条件)
return 递归公式的初值;
else
return 递归函数调用的返回值;
下面介绍一个典型的递归问题:汉诺塔问题。三根柱子A,B,C,A上套有从上到下大小依次增大的n=64个圆盘,规定每次只能移动一个圆盘,且小盘只能在大盘上面,问至少需要移动多少次,才能将这64个盘子全部移动到B柱上?
让我们先来考虑简单情况,n=2时,只需要将小盘移到c,大盘移到b,再将小盘移到b即可,三步。再考虑n个圆盘的情况,只需要将前n-1个视为一个整体,和第n个一起,又相当于两个盘。
——————————————————————————————————————————————————————————————————————————
由上面的梵塔问题可以得到,递归问题的处理思路有以下两个
缩小问题规模:把要解决的问题缩小为许多次解法相同的问题的叠加,直到程序缩小到一眼就能看出的程度。
结束递归调用:解出规模最小的那个问题,不断嵌套,则问题解决
比如斐波那契数列:1,1,2,3,5,8,13,……
代码如下
int fib(int x) { int y=0; if (x<=2) y=1; else y=fib(x-2)+fib(x-1); }
相关文章推荐
- 精彩百例:函数的递归调用
- C语言的函数,还有递归调用
- 函数的基本类型, 实参与形参的运用 调用头文件 递归调用
- PHP递归调用数组值并用其执行指定函数的方法
- zzuli OJ 1113: 递归调用的次数统计(函数专题)
- 函数调用,枚举和递归
- iOS基础篇——函数的递归调用(C++)
- 函数的递归调用
- Java中函数的递归调用
- MIT Python 第四课函数抽象与递归简介 函数调用与原代码的区别
- 函数的递归调用:age(n)=10(n=1); age(n)=age(n-1)+2(n>1)
- 练习 4-12 运用 printd 函数的设计思想编写一个递归版本的 itoa 函数,即通过递归 调用把整数转换为字符串
- C语言简单函数递归调用问题
- C语言-函数实现模块化设计-函数的递归调用
- 求两个数的最大公约数 (函数的递归调用)
- 函数的递归调用与栈
- (转载)你好,C++(27)在一个函数内部调用它自己本身 5.1.5 函数的递归调用
- 函数递归调用(c语言为例)
- c语言:函数的递归调用
- 用递归的方法编写函数求斐波那契级数,观察递归调用的过程