递归小感

写了一个验证谷角猜想的小程序,本来是用循环方法写的,交给老师之后,让我改成递归方法。

我一想,不就是把核心函数拷过来,把while改成return方法自身就行了嘛。。。

结果运行出错。。。

看了看算法书,专门研究了递归之后,才发现,原来是没有出口啊!

所谓没有出口,也就是指,递归函数必须要满足一个要求,就是,必须有一个非递归定义的初始值,诸位千万别小看这一点,也许你看我现在的代码,感觉到非常容易,但是当真的去思考的时候,才发现敲代码时,如果没有专门朝着一方面考虑,很难考虑到这一点。

原核心函数(循环方法当中的):

if(n%2==0)
   {
    System.out.print("上次偶数:");
    n=n/2;
    if(n==1)
    {
     System.out.println("最终结果为:");
    }
    System.out.print(n+"  ");
   }
   else
   {
    System.out.print("上次奇数:");
    n=n*3+1;
    if(n==1)
    {
     System.out.println("最终结果为:");
    }
    System.out.print(n+"  ");
   }

改进后的核心函数递归方法当中的:

if(n%2==0)
  {
   System.out.print("上次偶数:");
   n=n/2;
   if(n==1)
   {
    System.out.println("最终结果为:");
    System.out.print(n+"  ");
    return 1;
   }
   System.out.print(n+"  ");
   return diguiProc(n);
  }
  else
  {
   System.out.print("上次奇数:");
   n=n*3+1;
   if(n==1)
   {
    System.out.println("最终结果为:");
    System.out.print(n+"  ");
    return 1;
   }
   System.out.print(n+"  ");
   return diguiProc(n);
  }

 

另外补充一点,书上说的,递归方法的使用对象一定具有递归性在数学上是指:一定能够用一个数学表达式表示出递归关系

递归三特点:1、每个递归函数都必须有一个非递归定义的初始值,作为递归结束的标志,或递归结束的出口;2、问题具有递归性;3、递归方法的时间和空间复杂度都比较高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值