递归学习笔记

一种算法调用自己来完成它的部分工作,就称这种算法是递归的(Recursive)。一个递归算法必须有两个部分:初始情况和递归部分。初始情况只处理可以直接解决而不需要再次递归调用的简单输入。递归部分则包含对算法的一次或者多次递归调用,每一次的调用参数都在某种程度上比原始调用参数更接近初始情况。

 

计算 N! 的递归算法

 

 

public class RecurveFac {

 

public static void main(String[] args) {

 

//将输入参数转换为整形;Java中int型有4个字节,每个字节8位,所以int范围有2的32次方那么大。

int number = Integer.parseInt(args[0]);

if (number<0 || number >14)

{

System.out.println("Number is out of range!!!");

System.exit(0);

}

 

int result = recFactorial(number);

System.out.print(result);

}

 

private static int recFactorial(int Num){

int i = Num;

 

//初始情况

if(i<=1) return 1;

 

//递归部分,假设 i=3;第一次 recFactorial(3-1)*3; 

//   ||

//    recFactorial(2-1)*2;

//         ||

//return 的结果为: recFactorial(1)×2×3; recFactorial(1)满足初始情况,return 1;

        //最终结果为:1×2×3

return recFactorial(i-1)*i;

}

 

}

 

 

********

非递归实现N!

 

public class factorial {

 

public static void main(String[] args) {

 

int N= Integer.parseInt(args[0]);

int result=fac(N);

System.out.println(N+"! is "+result);

}

 

private static int fac(int n){

int t=1;

 

for(int Num=n;Num>1;Num--){

t*=Num;

}

return t;

   }

 

}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值