C++递归函数

如果一个函数在其函数体内直接或间接地调用了自己,该函数就被称为递归函数。递归函数是解决某些复杂问题的十分有效的方法。


》递归适用于:

    #数据的定义形式按递归定义。

           如Fibonacci数列的定义为:

                 f(n)=f(n-1)+f(n-2)           当n>1

                 f(0)=1                               当n=0

                 f(1)=2                               当n=1

           

            整数的阶乘定义:

                   n!=n*(n-1)!                   当n>0

                   0!=1                              当n=0

         这类递归问题可转化为递推问题,递归边界作为递推的边界条件。


    #数据之间的关系(即数据结构)按递归定义,如树的遍历、图的搜索等。

    #问题解法按递归算法实现,例如回溯法等。


    >示  例

      求阶乘n!

#include<iostream>
using namespace std;
int fact(int n)                  
{
	if(n<=1) return 1;
	else return n*fact(n-1);
}
int main(){
	int k;
	do{
		cout<<"请输入一个非负数:";
		cin>>k;
	}while(k<0);
	cout<<k<<" 阶乘是 "<<fact(k)<<endl;

	system("pause");
	return 0;
}

若用fact(3)调用该函数,则执行过程如下:

        >调用fact(3),由于n=3(n<=1条件为假),所以函数返回表达式3*fact(2)的值。

        >调用fact(2),由于n=2(n<=1条件为假),所以函数返回表达式2*fact(1)的值。

        >调用fact(1),由于n=1(n<=1条件为真),所以函数返回数值1。

        由于函数调用fact(1)返回值为1,因此,调用fact(2)返回值为2*fact(1)=2*1=2;因此,调用fact(3)返回值为3*fact(2)=3*2=6。


递归算法并不是变成语言所必须的,不用它同样可以实现相应的功能,如上面阶乘例子中,递归函数fact可用下面的非递归方法实现(通常用循环或栈)实现:

int fact(int n)
{
	int f=1;
	while(n>0){
	    f*=n;
	    n--;
	}
	return f;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值