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

C++递归函数无法自调用问题排查及数学公式实现求助

问题分析与代码修正

核心问题点

  • 无限递归死循环:当n == 1时,代码中return x * recur(n,x) - x会持续调用自身,无终止条件,直接触发栈溢出。
  • 参数类型不匹配:全局变量x是double类型,但递归函数recur的第二个参数为int类型,传入时会丢失精度,且不符合公式中x为浮点数的要求。
  • 递归逻辑与公式完全不符:原代码把公式的加法/减法结构写成了乘法,参数传递也完全错误。

公式还原(根据图片内容)

公式为递归定义的数值函数,正确逻辑如下:
$$
S(n, x) =
\begin{cases}
1 & n = 0 \
x \cdot S(n-1, x) - S(n-1, x-1) & n > 0
\end{cases}
$$
即:当n=0时返回1;n>0时,当前值等于x乘以n-1、x对应的函数值减去n-1、x-1对应的函数值。

修正后的C++代码

#include <iostream>
using namespace std;

// 递归函数:n为整数,x为浮点数,匹配公式参数要求
double recur(int n, double x) {
    if (n == 0) {
        return 1;
    } else {
        return x * recur(n - 1, x) - recur(n - 1, x - 1);
    }
}

int main() {
    int number;
    double x;
    
    cout << "输入n: ";
    cin >> number;
    cout << endl;
    
    do {
        cout << "输入非零浮点数x: ";
        cin >> x;
        cout << endl;
    } while (x == 0);
    
    cout << "recur(" << number << "," << x << ")=" << recur(number, x) << endl;
    system("pause");
    return 0;
}

关键修正说明

  • 移除全局变量,改用局部变量避免命名冲突和类型混乱
  • 按照公式设置n==0为递归终止条件,解决无限递归问题
  • 将递归函数的x参数改为double类型,匹配公式中x为实数的要求
  • 修正递归表达式结构,完全对齐公式的运算逻辑

内容的提问来源于stack exchange,提问作者Сергей Долгоруков

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:30:54