10.如何写递归代码

10.递归:如何用三行代码找到“最终推荐人”?

markdown文件已上传至github

推荐注册佣金这个功能大家应该都不陌生吧。用户A推荐用户B来注册,B推荐C注册。这里,用户B和用户C的最终“推荐人”都为用户A,用户A没有最终“最终推荐人”。

可以用数据库来记录这种推荐关系。在数据库表中,我们可以记录两行数据,actor_id表示用户ID,referrer_id表示推荐人ID。

img

**给定一个用户ID,如何查找这个用户的“最终推荐人”?

解决这个问题,可以用递归。

1.如何理解递归?

周末带着女朋友去看电影,女朋友问你咱们现在坐在第几排?电影院太黑,看不清,没法数。怎么办?

递归的思想:你可以问前面的人他在第几排,只要在它的数字上加一就知道自己在哪一排了。前一排的人也不知道自己在第几排,他也问他前一排的人。就这样一排一排往前问,直到问到第一排的人,说他在第一排,然后在这样一排一排再把数字传回来。于是你就知道自己在第几排了。

这就是一个递归分解问题求解的过程,去的过程叫做“递”,回的过程叫做“归’’。

所有的递归问题都可以用递归公式来表示。
f ( n ) = f ( n − 1 ) + 1   其 中 , f ( 1 ) = 1 f(n) = f(n-1) +1 \space 其中,f(1)=1 f(n)=f(n1)+1 f(1)=1

f ( n ) f(n) f(n)表示你想知道自己在第几排, f ( n − 1 ) f(n-1) f(n1)表示前一排所在排数, f ( 1 ) = 1 f(1)=1 f(1)=1表示第一排的人知道自己在第一排。

有了递归公式就容易写出代码了:

int f(int n) {
   
  if (n == 1) return 1;
  return f(n-1) + 1;
  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值