You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归函数FunctionZ求值解析请求:表格填充及步骤推导

递归函数FunctionZ的调用推导与表格填充

函数定义

首先明确给定的递归函数规则(用类Haskell语法表示):

FunctionZ [] = 0
FunctionZ[x:xs] = x + 2 * FunctionZ(xs)

规则解释:

  • 当传入**空列表[]**时,直接返回0(这是递归的终止条件,不会再继续调用自身)
  • 当传入**非空列表[x:xs]**时:
    • x是列表的head(第一个元素)
    • xs是列表的tail(去掉第一个元素后的剩余部分)
    • 返回值 = 第一个元素x + 2 × 对剩余部分xs调用FunctionZ的结果

正确填充后的调用表格

调用次数参数返回值
1[4,2,5,3]52
2[2,5,3]24
3[5,3]11
4[3]3
5[]0

逐次调用详细推导

递归的计算逻辑是先拆解到终止条件,再从终止条件反向计算返回值,以下按调用顺序结合计算顺序讲解:

第5次调用(终止调用)

  • 触发原因:第4次调用需要计算剩余部分的FunctionZ值,此时剩余部分是空列表
  • 参数:[]
  • 直接匹配函数第一条规则,返回值为0

第4次调用

  • 触发原因:第3次调用需要计算剩余部分的FunctionZ值,此时剩余部分是[3]
  • 参数:[3]
  • 拆分列表:x=3(第一个元素),xs=[](剩余部分)
  • 代入函数第二条规则:3 + 2 × FunctionZ([])
  • 替换第5次的返回值:3 + 2×0 = 3
  • 返回值:3

第3次调用

  • 触发原因:第2次调用需要计算剩余部分的FunctionZ值,此时剩余部分是[5,3]
  • 参数:[5,3]
  • 拆分列表:x=5(第一个元素),xs=[3](剩余部分)
  • 代入函数第二条规则:5 + 2 × FunctionZ([3])
  • 替换第4次的返回值:5 + 2×3 = 11
  • 返回值:11

第2次调用

  • 触发原因:第1次调用需要计算剩余部分的FunctionZ值,此时剩余部分是[2,5,3]
  • 参数:[2,5,3]
  • 拆分列表:x=2(第一个元素),xs=[5,3](剩余部分)
  • 代入函数第二条规则:2 + 2 × FunctionZ([5,3])
  • 替换第3次的返回值:2 + 2×11 = 24
  • 返回值:24

第1次调用(初始调用)

  • 参数:[4,2,5,3]
  • 拆分列表:x=4(第一个元素),xs=[2,5,3](剩余部分)
  • 代入函数第二条规则:4 + 2 × FunctionZ([2,5,3])
  • 替换第2次的返回值:4 + 2×24 = 52
  • 返回值:52

原答案错误说明

原答案中第4、5次调用存在两处错误:

  1. 第5次调用的参数应为[](空列表),而非[0],返回值是0而非3
  2. 第4次调用的返回值计算错误,正确值是3而非8(原答案错误地违反了递归终止条件的规则)

内容的提问来源于stack exchange,提问作者Josh Hodson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 20:43:11