#include<stdio.h>
int main()
{
int n,x;
int p(int a,int b);
printf("please input n,x:");
scanf("%d,%d",&n,&x);
printf("\n");
printf("it is:%d",p(n,x));
return 0;
}
int p(int n,int x)
{
int c,c1,c2;
if(n=0) c=1;
else
if(n=1) c=x;
else
c1=((2*n-1)*x-p(n-1,x))/n;
c2=(-(n-1)*p(n-2,x))/n;
c=c1+c2;
return (c);
} 谢谢!!!
代ç ä¸åå¨é®é¢ï¼å ¶ä¸æ¯2returnï¼cï¼ã
éå½å ¬å¼ï¼
1 (n=0)
pn(x)=x (n=1)
((2n-1)xpn-1(x)-(n-1)pn-2(x))/n (n>1)
å¨æ°å¦ä¸è®¡ç®æºç§å¦ä¸ï¼æ¯æå¨å½æ°çå®ä¹ä¸ä½¿ç¨å½æ°èªèº«çæ¹æ³ã éå½ä¸è¯è¿è¾å¸¸ç¨äºæ述以èªç¸ä¼¼æ¹æ³éå¤äºç©çè¿ç¨ã ä¾å¦ï¼å½ä¸¤é¢éåç¸äºä¹é´è¿ä¼¼å¹³è¡æ¶ï¼éä¸åµå¥çå¾åæ¯ä»¥æ ééå½çå½¢å¼åºç°çã ä¹å¯ä»¥ç解为èªæå¤å¶çè¿ç¨ã
éå½æ³æ§è¡è¿ç¨ï¼
éå½ç®æ³çæ§è¡è¿ç¨åéæ¨ååå½ä¸¤ä¸ªé¶æ®µãå¨éæ¨é¶æ®µï¼æè¾å¤æçé®é¢ï¼è§æ¨¡ä¸ºnï¼çæ±è§£æ¨å°æ¯åé®é¢ç®åä¸äºçé®é¢ï¼è§æ¨¡å°äºnï¼çæ±è§£ãä¾å¦ä¸ä¾ä¸ï¼æ±è§£fib(n)ï¼æå®æ¨å°æ±è§£fib(n-1)åfib(n-2)ã
ä¹å°±æ¯è¯´ï¼ä¸ºè®¡ç®fib(n)ï¼å¿ é¡»å 计ç®fib(n-1)åfib(n-2)ï¼è计ç®fib(n-1)åfib(n-2)ï¼åå¿ é¡»å 计ç®fib(n-3)åfib(n-4)ãä¾æ¬¡ç±»æ¨ï¼ç´è³è®¡ç®fib(1)åfib(0)ï¼åå«è½ç«å³å¾å°ç»æ1å0ãå¨éæ¨é¶æ®µï¼å¿ é¡»è¦æç»æ¢éå½çæ åµãä¾å¦å¨å½æ°fibä¸ï¼å½n为1å0çæ åµã是2return(c)
递归公式
1 (n=0)
pn(x)=x (n=1)
((2n-1)xpn-1(x)-(n-1)pn-2(x))/n (n>1)
例如:
#include <stdio.h>
float p (int n,int x)
{
int f;
if(n<0)
{
f = -1;
printf("error, n should be larger than 0");
}
else if(n==0)
{
f = 1;
}
else if (n==1)
{
f = x;
}
else if (n>1)
{
f=((2*n-1)*x*p(n-1, x)-(n-1)*p(n-2,x))/n;
}
return f;
}
void main ()
{
int n,x;
printf("请输入n,x的值:");
scanf("%d%d",&n,&x);
printf("结果为:%d\n",p(n,x));
getchar();
}
扩展资料:
由于递归引起一系列的函数调用,并且可能会有一系列的重复计算,递归算法的执行效率相对较低。当某个递归算法能较方便地转换成递推算法时,通常按递推算法编写程序。
例如上例计算斐波那契数列的第n项的函数fib(n)应采用递推算法,即从斐波那契数列的前两项出发,逐次由前两项计算出下一项,直至计算出要求的第n项。
参考资料来源:百度百科-递归法
本回答被网友采纳...x,n=1 ((2n-1)*x-Pn-1(x)-(n-1)*Pn-2(x))\/n,n>=1 有问题
代码中存在问题,其中是2return(c)。递归公式:1 (n=0)pn(x)=x (n=1)((2n-1)xpn-1(x)-(n-1)pn-2(x))\/n (n>1)在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。 递归一词还较常用于描述以自相似方法重复事物的过程。 例如,当两面镜子相互之间近似平行时,镜中嵌套...
n次勒让德多项式的递推公式
用递归方法求n阶勒让德多项式的值,递归公式如下:当n=0的时候,p(0,x)=1 当n=1的时候,p(1,x)=x 当n1的时候,p(n,x)=((2*n-1)*x*p(n-1,x)-(n-1)*p(n-2,x))
C语言用递归法求n阶勒让德多项式的值
递归法求解n阶勒让德多项式的值,关键在于利用上述递推关系,从已知的低阶多项式值出发,逐步计算出高阶多项式的值。具体实现步骤如下:1. 初始化基础情况,即n = 0和n = 1时的多项式值。2. 对于n > 1的情况,根据递推关系计算P_n(x)的值。这里的计算过程中,我们需要利用x的值和已计算出的...
C语言用递归法求n阶勒让德多项式前10项的值
if (n == 0) \/\/ 递归出口 return 1;else if (n == 1) \/\/ 递归出口 return x;else \/\/ 递归公式 return ((2 * n - 1) * x - P(n - 1, x) - (n - 1) * P(n - 2, x)) \/ n;} int main(){ int n; \/\/ 阶数 double x; \/\/ 自变量 printf("请输入阶数和自变量...
VB编程:用递归方法求n阶勒让德多项式的值
MsgBox P(2, 2)End Sub Function P(ByVal n As Integer, ByVal x As Double) As Double If n = 0 Then P = 1 Exit Function End If If n = 1 Then P = x Exit Function End If P = ((2 * n - 1) * x * P(n - 1, x) - (n - 1) * P(n - 2, x)) \/ n ...
C语言用递归方法求n阶勒让德多项式
当n=0时,勒让德多项式L₀(x)=1 当n=1时,勒让德多项式L₁(x)=x 对于n>1的情况,利用递归关系式:Lₙ(x) = (2n-1)xLₙ₋₁(x) - (n-1)Lₙ₋₂(x) \/ n 通过该递归公式,我们可以直接计算出任意阶勒让德多项式。值得注意...
c语言:用递归方法编写程序,求n阶勒让德多项式的值
if (n == 0) { return 1;} if (n == 1) { return x;} return ((2 * n - 1)*x - legendre(n - 1, x) - (n - 1)*legendre(n - 2, x)) \/ n;} void main() { int n;int x;printf("请输入n的值和x的值\\n");scanf("%d %d", &n, &x);printf("P%d(%d)...
用递归方法求n阶勒让德多项式的值递归公式
当n=0时,Pn(x)=1;当n=1时,Pn(x)=x;当n>1时,如下递归公式:百度百科-勒让德多项式
(3)编写程序,用递归法求n阶勒让德多项式写,如图
int n,int x){ if (0 == n) { return 1; } else if (1 == n) { return x; } else { return ((2 * n - 1) * x - myfunction(n - 1 , x) - (n - 1) * myfunction(
C语言用递归方法求n阶勒让德多项式的值
double polya(n,x);int main(){ int x,n;scanf("%d%d",&n,&x);printf("%.2f\\n",polya(n,x));return 0;} double polya(int n,int x){ double y;if(n==0)y=1;if(n==1)y=x;if(n>1)y=((2*n-1)*x*polya(n-1,x)-(n-1)*polya(n-2,x))\/n;return y;} 运行...