搬搬砖得了 2022-07-19 14:11 采纳率: 57.1%
浏览 49
已结题

C语言的编程问题求解!

我的C程序为什么结果会是6啊!递归调用应该只是返回给倒数第二个调用的函数才对啊!其他的递归调用函数应该是没有接收到返回值才对啊!

#include <stdio.h>

int i = 1;
int fc(int n){
  if(n == 1)
    return i;
  else if(n % 2 == 0) {
    fc(n / 2);
    i++;
  }
  else {
    fc(3 * n + 1);
    i++;
  } 
}

int main() {
  int n, step;
  n = 5;
  step = fc(n);
  printf("\n%d \n", step);
  printf("\n%d", i);
  
  return 0;  
}
  • 写回答

3条回答 默认 最新

  • 於黾 2022-07-19 14:19
    关注

    i是全局变量啊
    你的fc函数返回值写的是return i
    这返回值本来就没有什么意义
    而i是在每次执行递归的时候都++的
    那么你的函数到底执行了多少次递归,就执行了多少次i++
    因为整个过程中除了让i自加,并没有修改i的地方
    所以i++写在fc调用之前还是调用之后都是等效的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
  • 快乐鹦鹉 2022-07-19 14:21
    关注

    但i是全局变量啊,在递归过程中,每次递归i值就会增加1
    第一次是5,执行fc(3 * n + 1),相当于f(16),后续i会加1
    对于f(16),会一直递归执行fc(n/2),直到fc(1)结束递归,返回i,在这个过程中,f(16),f(8),f(4),f(2)各自会让i加1,因此总共i会加5次,因此最后return时,i值是6

    评论 编辑记录
  • 搬搬砖得了 2022-07-19 15:46
    关注

    我尝试了Javascript -> undefined

      var i = 1;
      let n = 5;
    
      function fc(n){
        if(n == 1)
          return i;
        else if(n % 2 == 0) {
          fc(n / 2);
          i++;
        }
        else {
          fc(3 * n + 1);
          i++;
        } 
      }
      console.log(fc(n))
    

    Python -> None

    i = 1
    
    def fc(n):
      global i
      if n == 1:
        return i
      elif n % 2 == 0:
        fc(n / 2)
        i += 1
      else:
        fc(3 * n + 1)
        i += 1
    
    n = 5
    step = fc(n)
    print("step: {}".format(step))
    

    以及Java -> -1 指定的

    package com;
    
    public class testC {
      private int i = 0;
      public static void main(String[] args) {
        testC c = new testC();
        int r = c.fc(5);
        System.out.println(r);
      }
    
      public int fc(int n){
        if(n == 1)
          return i;
        else if(n % 2 == 0) {
          fc(n / 2);
          i++;
        }
        else {
          fc(3 * n + 1);
          i++;
        }
    
        return -1;
      }
    }
    

    我得到了相同的答案,我不清楚为什么C语言 拥有连续递归连续返回函数值的功能

    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月27日
  • 已采纳回答 7月19日
  • 创建了问题 7月19日

悬赏问题

  • ¥15 复杂表达式求值程序里的函数优先级问题
  • ¥15 求密码学的客成社记ji着用
  • ¥35 POI导入树状结构excle
  • ¥15 初学者c语言题目解答
  • ¥15 div editable中的光标问题
  • ¥15 mysql报错1415Not allowed to return a result set from a trigger 不知如何修改
  • ¥60 Python输出Excel数据整理,算法较为复杂
  • ¥15 回答几个问题 关于数据库
  • ¥15 51单片机串口通信问题,未完成且要修改
  • ¥15 百鸡问题 c++编程问题(相关搜索:输出数据)