什么是递归

函数递归就是函数自己调自己;

例 1:递归函数

int fun (int i) {
	return fun (i);
}	

例1就是一个递归,不过它是一个无终止的递归。正常编写的程序应该是有限次数的,有终止条件的递归。可以用 if else 语句作限制。

例2 递归函数求n的阶乘

int main()
{
   int fun(int);
   cout<<fun(3) <<endl;
   return 0;
}
int fun (int n) {
    int a=0;
    if (n==1||n==0) {
        return 1;
    } else {
      a= fun(n-1)*n; 
    }
   return a;
}

递归之精髓 就在 a= fun(n-1)*n; 这一行。
程序执行流程 :

  1. main方法中调用fun函数,传入整数3.
  2. 执行 a= fun(n-1)*n语句中的fun(n-1)注意此时a没有赋值fun(n-1)也没有乘上n。只是单纯的再次调用fun方法
  3. 第二次调用fun,传入的值是n-1,即fun(2)
  4. 整数2再次进入 a= fun(n-1)*n的fun(n-1),此时a依然没有赋值,fun(n-1)也没有乘上n,只在调用fun方法,此时n为2;
  5. 经由两次递归后传入fun的值变成了1,此时执行 return 1语句,这个return 1 并不是表示整个方法结束了,返回1到main函数。而是将1返回至第四步尚未执行 乘n 操作的fun(n-1)方法。 这样第四步调用的fun(-1)就有了具体的返回值 1,执行时体现为 a= 1* 2;**注:(fun(n-1)=1,n=2)**执行完后a第一次有了具体的值 2.
  6. a 的值变成2后,此时程序 第一次执行 最后一行的 return a; 语句,这个return a 同样也不是表示整个方法结束了,返回a到main函数。而是将a的值返回至第第二步还在等待 乘n 的fun(n-1)方法。此时 a = 2*3(fun(n-1)=2,传入的n=3)。
  7. 第六步执行完后 a=6,此时会再执行return a;语句,将a的值返回至main函数里调用的fun(3).

fun函数一共被调用三次,一次是main函数里调用 fun(3),还有两次fun函数自己调用的即fun(2),fun(1); 最重要的是要理解我们调用fun函数并不是立即得到返回值,而是再等待程序递归至最低级,最低级有了确定的返回值,再层层递推上级。fun(3)里调用fun(2),fun(3)就陷入等待,fun(2)里调用fun(1),fun(2)陷入等待。直至fun(1)返回了1,fun(2)才会继续执行,fun(2)执行完后,fun(3)才能继续执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值