函数递归调用的新奇思想:盒中球模型

首先函数的递归调用最为经典的就是按位输出一个整数了。代码如下:

按位输出代码                                                                逆序输出代码

#include<stdio.h>                                                        #include<stdio.h> 
void lin(int n)                                                                void lin(int n) 
{                                                                                   {
    int r;                                                                          int r;
    r=n%10;                                                                   r=n%10;
    if(n/10!=0)                                                                 printf("%d\n",r);
    lin(n/10);                                                                   if(n/10!=0) 
    printf("%d\n",r);                                                         lin(n/10); 
}                                                                                    }
int main(void)                                                                int main(void)
{                                                                                     {
    int n;                                                                               int n;
    scanf("%d",&n);                                                              scanf("%d",&n);
    lin(n);                                                                              lin(n);
    return 0;                                                                         return 0;
}                                                                                     }

可以看出自定义函数中有两个最为重要的部分1、递归语句“lin(n/10)”和2、输出语句“printf("%d\n",r)”。

我把这种类型称为“盒中球”模型。假设有一个盒里面装着一个盒子和一个球,第二个盒子里也装着一个盒子和一个球,第三个盒子里也装着一个盒子和一个球……第n个箱子里也有一个盒子和一个球……直到最后一个盒子里只有一个球。每次打开盒子你都有两个选择:“打开下一个盒子(即代表函数中的进入下一次递归如:lin(n/10)) 或把球拿出来(即代表执行当前语句如:printf("%d\n",r))。这样看来按位输出还是逆序输出只不过是改变了"拿球”还是“开盒子”的顺序。

再甚然更为复杂的函数也只不过是改变了拿球所代表的含义。

初次发表,如有问题,还望斧正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值