对于递归的浅显理解

递归函数,在于能够频繁调用自身,但递归函数需要一个确定的递归终止条件,即所谓的递归出口。而在递归函数中如果需要修改某个变量的值,则需要引入引用的问题。举个例子:

int find(int n, int *a, int low, int high)

{

    int flagCand = 0;

    int mid;
    if(low < high)
    {
        mid = (low + high)/2;
        if(a[i][mid] == data)
            flagCand = 1;
        else if(data < a[i][mid])
           
isInCandidate(i, data, a, low, mid - 1);
        else
            isInCandidate(i, data, a, mid + 1, high);
     }
     return flagCand;

}

 

可以看到,这是一个最简单的折半查找算法。但是这个算法事实上返回的结果是错误的!

 

因为我们在判断相等的时候改变了flagCand的值,但若这个改变存在于非顶层递归时,这个改变是无法记录下来的。在递归顶层时候,flagCand还是原来的值0。

 

解决这个问题的方法有两种:1、利用引用类型数据进行改变。2、利用全局变量改变flagCand的值。两种方法均可行,须依据实际例子来进行选择哪种方法为最优

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值