一个函数只有一个出口

出口就是函数退出的地方,一个return也算是一个出口。如果一个函数有多个出口可能扰乱读者的思考

int max_num(int a, int b)
{
     return a < b ? b : a;       
}

这是一个出口,再看个两个出口的

int max_num(int a, int b)
{
    if (a < b)
    {
        return b;
    }
    else
    {
        return b;
    }
}

看起来似乎还好,没影响到阅读。再看个复杂点的

bool update_user_amount (DBSession& db_session, int modify_amount)
{
  if (db_session.is_valid())
  {
     return false;
  }

if (!db_sesson.start_transaction()) { return false; } if (db_session.query("SELECT amount FROM user WHERE ... FOR UPDATE")) { DBRow db_row = db_session.fetch_row(); if (!db_row.is_null()) { db_session.rollback(); return false; } int balance_amount = 0; if (!db_row.get_value("amount", balance_amount)) { db_session.rollback(); return false; } balance_amount += modify_amount; if (balance_amount < 0) { db_session.rollback(); return false; } if (!db_session("UPDATE amount....")) { db_session.rollback(); return false; } db_session.commit(); return true;
  }
  else
  {
     db_session.rollback();
     return false;
  } }

 这段代码是从实际项目里摘出来简化后的,虽然是简化的,但是看起来依然不太友好,如果后续要修改的话,非常有可能忽略事物的处理,比如直接return了但是没有提交或回滚事物。当一个函数有数百行长时,再加上if else嵌套过深,如果随意return将给阅读带来极大的难度

转载于:https://www.cnblogs.com/tianrks/p/10590460.html

### 回答1: 我可以提供以下思路:首先,要定义一个递归函数,它接受一个数组作为参数。然后,在函数内部,使用一个循环来遍历数组,并且比较每一个元素的大小,将大的元素放在前面,小的元素放在后面。最后,返回排序后的数组。 ### 回答2: 递归排序函数可以使用分治法来设计,其中最经典的排序算法是归并排序。 设计一个递归排序函数的步骤如下: 1. 设定递归终止条件:当待排序数组的长度小于等于1时,即认为该数组已经是有序的,不需要再进行排序。 2. 在递归函数中,将待排序数组一分为二,分别进行递归排序。 3. 合并排序后的两个子数组:将两个有序的子数组合并为一个有序的数组。通常采用的方法是利用一个额外的空间,通过比较两个子数组的元素,逐个将较小的元素放入空间中,直到将两个子数组中的所有元素都放入空间中。 4. 返回合并后的有序数组。 以下是一个简单的归并排序递归函数的例子: ```python def merge_sort(arr): if len(arr) <= 1: return arr mid = len(arr) // 2 left_arr = merge_sort(arr[:mid]) right_arr = merge_sort(arr[mid:]) return merge(left_arr, right_arr) def merge(left_arr, right_arr): result = [] i = j = 0 while i < len(left_arr) and j < len(right_arr): if left_arr[i] < right_arr[j]: result.append(left_arr[i]) i += 1 else: result.append(right_arr[j]) j += 1 if i < len(left_arr): result.extend(left_arr[i:]) if j < len(right_arr): result.extend(right_arr[j:]) return result ``` 以上函数中,`merge_sort`函数用来对输入的数组进行归并排序,而`merge`函数用来合并两个有序数组。在`merge`函数中,通过比较两个子数组的元素,将较小的元素依次放入`result`空间中,直到将两个子数组的所有元素都放入`result`空间。最后,返回合并后的有序数组。 以上是一个简单的递归排序函数的设计,不同的排序算法可能有不同的实现方法和细节,但递归的基本思想是相通的。 ### 回答3: 一个递归的排序函数的设计首先需要确定排序算法的类型,例如使用冒泡排序、快速排序等。以快速排序为例,下面给出一个递归的排序函数的设计: 1. 设定一个递归函数,接受一个待排序的数组和数组的起始下标start以及结束下标end作为参数。 2. 在递归函数中,首先设定递归的出口条件,当start等于end时,表示只有一个元素,即已经排好序。 3. 选择数组中的一个基准值pivot,通常选择数组的中间元素,将数组分为左右两部分。 4. 创建两个指针left和right,分别指向数组的start和end。 5. 移动left指针,直到找到一个大于等于基准值的元素。 6. 移动right指针,直到找到一个小于等于基准值的元素。 7. 如果left小于等于right,则交换left和right指针指向的元素。 8. 重复步骤5-7,直到left大于right。 9. 交换基准值和left指针指向的元素。 10. 递归调用排序函数,对基准值左右两部分分别进行排序,即调用函数分别传入start和left-1,以及left+1和end作为参数。 使用上述的递归排序函数,可以对一个待排序的数组进行排序。递归的过程中,每次都将数组分割为更小的子数组,并对子数组进行排序,最终实现整个数组的排序。需要注意的是,在实际使用中,为了避免出现栈溢出的情况,可以添加对递归深度的限制,或者使用尾递归进行优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值