2301_80928674 2024-01-04 16:25 采纳率: 100%
浏览 5
已结题

为什么递归的中间值能够求出,且结果不同


#include <stdio.h>

int fun(int x, int n) {
    int result;
    if (n == 1)
        return x;
    else {
        result = x + fun(x, n - 1);
        printf("result = %d, n = %d\n", result, n);
        return result;
    }
}
int main()
{
printf("y=%d",fun(4,5));
}

为什么result的值不固定,正常情况下怎么会求出x+fun(x,n-1)的值

  • 写回答

4条回答 默认 最新

  • Bin_hao 2024-01-04 16:48
    关注
    主函数main(){},  输出y =  fun(4,5);
    调用fun(),        所以,int x = 4  , int n =5 ;  
    先定义   int   result;
     然后判断  // n  == 1 为真  则  返回 x  
        n ==  1   为假 , 则   result  =  x +  fun(x ,  n- 1 )   (这里又调用了fun()  )    输出result  = ** ,  n =  ##    返回   result  (给主函数的y=)
     因为n=5 ,所以一共会调用5次(前4次为假,最后一次为真)
    
    
    fun(4,5)
    x                                n                            r
    4                                  5                            4+ r1
    
    x                                 n-1                            r1
    4                                  4                            4+r2
    
    x                                 n-2                             r2
    4                                  2                            4+r3
    
    x                                n-3                               r3
    4                                1                                x=4
    
    r3 = 4    r2=r3+4=8    r1=4+r2=12    r=4+r1=16
    
    
    

    所以依次输出为:

    result  = 4,     n =  1
    result  = 8,     n =  2
    result  = 12,   n =  3
    result  = 16,   n =  4
    y=16
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 1月12日
  • 已采纳回答 1月4日
  • 创建了问题 1月4日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境