您的位置:首页 > 编程语言 > C语言/C++

函数的递归调用

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语言 递归