water_boy_Lee
lerrorgk
采纳率60%
2017-08-11 02:07 阅读 1.3k
已采纳

这个计算阶乘的递归中,如果n=1,那么n - 1=0,那结果不就是0了吗

long rfact(int n)
{
      long ans;

      if (n > 0)
            ans = n * rfact(n - 1);
      else
            ans = 1;

      return ans;
 }
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

8条回答 默认 最新

  • 已采纳
    m0_38082783 Rattenking 2017-08-11 02:18

    当 n = 1 的时候 ans = 1* ans(0) ;
    ans(0) 的执行结果就是返回一个 ans = 1;
    所以表达式ans = 1* ans(0) 的结果为ans = 1 * 1 = 1;
    最终n = 1时返回的结果是 ans = 1;

    点赞 1 评论 复制链接分享
  • weixin_39684284 ermaotech 2017-08-11 02:12

    n=1时。代码执行到rfact(n-1)时,实际上是调用了rfact(0),这个时候,执行函数的话,会触发if的判断条件,使其返回ans=1

    点赞 1 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2017-08-11 02:09

    n=1的时候不会执行 ans = n * rfact(n - 1);而是直接返回1 (ans = 1;)

    点赞 评论 复制链接分享
  • qq_34658785 卖太妃糖的古尔丹 2017-08-11 02:13

    没有啊n=1的时候,也会返回1,你传进去1,1>0,执行ans = n * refact(n-1),递归推进,传0进去,0>0为false,返回ans=1,递归返回,1*1结果为1啊

    点赞 评论 复制链接分享
  • qq_36893617 豪梦 2017-08-11 02:19

    n=1 ans=n* rfact(n-1) ,也是ans=0 但计算机会判断 结果返回asn=1

    点赞 评论 复制链接分享
  • Small_Mouse0 鼠小 2017-08-11 02:23

    if (n > 0),,,,这个判断就是说,,,,大于0才阶乘,,,不大于零,,,就返回1

    点赞 评论 复制链接分享
  • a546620706 a546620706 2017-08-11 02:24

    解决方案,如果n==1就结束循环,不等于1才递归。
    public class jiecheng {
    public static int fun(int num1){
    if(num1==1)
    return 1;

    else return num1*fun(num1-1); }

    public static void main(String[] args){
        int num=5;  
        int jiec=1;
        jiec = fun (num);
        System.out.println(jiec);   }       
    

    }

    点赞 评论 复制链接分享
  • congge_1993 瞭望塔 2017-08-11 03:00

    递归的条件那里设置n>1,=1时就不需要继续递归调用了,执行是没问题的,多了一层调用

    点赞 评论 复制链接分享

相关推荐