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

如何利用给定递归sum函数实现数字翻倍程序?

解决方案:把递归求和程序改成计算数字两倍值的程序

嘿,别担心!刚接触编程遇到这种小问题太正常了,我来帮你把这个程序改对,还会给你讲清楚每一步的思路~

首先,先帮你理清楚原来的程序是干啥的:

原来的sum函数是用递归实现两个数相加:每次把x加1,y减1,直到y变成0,最后返回的就是x+y的结果。main函数里是输入两个整数,调用sum求和后输出。

你的需求是输入一个数字,返回它的两倍(比如输入2返回4),本质上就是计算x*2,而x*2其实等于x+x——刚好可以利用原来的递归求和逻辑!当然也可以直接修改成专门计算两倍的递归函数,我给你两种简单的改法:

方法1:最小改动——复用原来的sum函数

这种方法不用改sum函数的逻辑,只需要修改main函数的输入和调用方式,非常适合新手快速完成需求:

// Sum, recursive, using only elementary operations
#include <stdio.h>

int sum(int x, int y) {
    return y == 0 ? x : sum(x+1, y-1);
}

int main(void) {
    int x;
    // 只需要输入一个数字x,不需要y了
    scanf("%d", &x);
    // 调用sum(x, x),相当于计算x+x,也就是2*x
    int z = sum(x, x);
    printf("%d\n", z);
    return 0;
}

改动说明:

  • 删掉了main里的int y;,因为现在只需要一个输入值
  • 把scanf("%d%d", &x, &y);改成scanf("%d", &x);,只读取一个整数
  • 调用sum的时候传两个x,这样sum(x,x)就会递归计算x+x,结果就是x的两倍

方法2:改写sum为专门计算两倍的递归函数

如果你想彻底改成只处理单输入的逻辑,也可以把sum函数改成double_num,专门计算数字的两倍,逻辑更清晰:

#include <stdio.h>

// 递归计算x的两倍:x==0时返回0,否则返回前一个数的两倍加2
int double_num(int x) {
    return x == 0 ? 0 : double_num(x-1) + 2;
}

int main(void) {
    int x;
    scanf("%d", &x);
    int z = double_num(x);
    printf("%d\n", z);
    return 0;
}

逻辑解释:

比如输入2的时候:

  • double_num(2)会调用double_num(1)+2
  • double_num(1)会调用double_num(0)+2
  • double_num(0)返回0
  • 所以最终是0+2+2=4,正好是2的两倍

为什么你之前的尝试没成功?

你说想删除y相关代码并替换为重复操作,方向是对的!可能是没处理好递归的终止条件,或者输入输出的部分——比如如果删掉了y但没改scanf的格式,程序会卡住等待输入;或者修改递归逻辑时没找对终止条件。慢慢来,多试几次就能掌握啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:11:13