涛行 发表于 2020-10-25 13:04

有关C语言函数递归调用的问题

本帖最后由 涛行 于 2020-10-25 17:03 编辑

今天写码用了一下函数递归调用,结果输入n大了之后就会死循环,小白已经束手无策了{:301_972:},望大佬们帮忙看一下,谢谢大佬们


#include<stdio.h>

int pnx(int n, float x);

int main()
{
      int n;
      float x;
      printf("Please input n&x:");
      scanf("%d%f", &n, &x);
      pnx(n, x);
      return 0;
}

int pnx(int n,float x)
{
      int px1, px2;
      float px;
      if (n < 0)return -1;
      else
      {
                if (n == 0)px = 1;
                else if (n == 1)px = x;
                else
                {
                        px1 = pnx(n - 1, x);
                        px2 = pnx(n - 2, x);
                        px = ((2 * n - 1) * x - px1 - (n - 1) * px2) / n;
                }
                printf("pn(x)=%f\n", px);
      }
      return px;
}

挑灯看花 发表于 2020-10-25 13:12

本帖最后由 挑灯看花 于 2020-10-25 13:14 编辑

当我没说{:301_1004:}

qwer01234 发表于 2020-10-25 13:12

应该是冗余计算太多了那,n大了之后计算机假死了。

涛行 发表于 2020-10-25 13:17

qwer01234 发表于 2020-10-25 13:12
应该是冗余计算太多了那,n大了之后计算机假死了。

那该怎么改呢

Loongson2012 发表于 2020-10-25 13:18

n大了估计会爆栈吧。。。

涛行 发表于 2020-10-25 13:19

Loongson2012 发表于 2020-10-25 13:18
n大了估计会爆栈吧。。。

n=3就不是一个结果了

涛行 发表于 2020-10-25 13:48

没有大神帮忙看看嘛

hrdom 发表于 2020-10-25 14:28

涛行 发表于 2020-10-25 13:17
那该怎么改呢

不是,就是终止条件有问题

hrdom 发表于 2020-10-25 14:33

hrdom 发表于 2020-10-25 14:28
不是,就是终止条件有问题

至于具体怎么改,我没怎么看懂是什么逻辑,是求什么的

涛行 发表于 2020-10-25 14:47

hrdom 发表于 2020-10-25 14:33
至于具体怎么改,我没怎么看懂是什么逻辑,是求什么的

计算N阶勒让德多项式
页: [1] 2 3
查看完整版本: 有关C语言函数递归调用的问题