@SuHongjun
2020-04-23T03:38:41.000000Z
字数 1694
阅读 262
C语言
2020春季学期
#include "stdio.h"
int pf(int x)
{
return x*x;
}
int add(int x, int y)
{
return pf(x) + pf(y); //调用函数 pf()
}
main()
{
int a=3,b=5,c=0;
c = add(a,b); //直接调用add() ,间接调用了函数 pf()
printf("c=%d\n", c);
}
递归调用就是一个函数自己调用自己
输入n, 计算并输出 n!, 要求用用户自定义的递归函数实现
#include "stdio.h"
long jc(int n) //非递归函数:计算 n!
{
long x=1,i;
for(i=1; i<=n; i++)
x *= i;
return x;
}
long jc2(int n) //递归函数:计算 n!
{
if(n==1) //递归结束的条件
return n;
else
return n * jc2(n-1); //调用自己 n! = n * (n-1)!
}
main()
{
int n;
printf("n=");
scanf("%d", &n);
printf("%d! = %d\n",n, jc(n)); //调用非递归函数
printf("%d! = %d\n",n, jc2(n)); //调用递归函数
}
斐波那契数列:1,1,2,3,5,8,13,21,34,55,89,。。。。。。
非递归方式:
#include "stdio.h"
int fbnq_i(int i_1, int i_2) //斐波那契数列的第 i 项值
{
return i_1 + i_2;
}
main() //输出斐波那契数列: 非递归方式
{
int end = 1000, a=1, b=1,t;
printf("斐波那契数列:\n");
printf("%d\t",a);
while(b <= end)
{
printf("%d\t",b);
t = a;
a = b;
b = fbnq_i(t,b); //调用函数fbnq_i( ) 得到数列第i项值
}
printf("\n");
}
斐波那契数列输出的递归实现:
#include "stdio.h"
int fbnq_dg(int i) //用递归方式,返回斐波那契数列的第 i 项值
{
if(i<=1) //递归结束的条件
return 1;
else
return fbnq_dg(i-1) + fbnq_dg(i-2); //递归计算:斐波那契数列第i项 = 第i-1项 + 第i-2项
}
main() //输出斐波那契数列,采用递归方式,main()的代码更简洁易读
{
int end = 1000,i=0;
printf("斐波那契数列:\n");
while(fbnq_dg(i) < end)
{
printf("%d\t",fbnq_dg(i)); //调用函数fbnq_dg( ) 得到数列第i项值
i++;
}
printf("\n");
}
斐波那契数列输出的递归实现2:
#include "stdio.h"
int fbnq_i(int i) //计算并返回斐波那契数列中第 i 项的值
{
if(i<=2)
return 1;
else
return fbnq_i(i-1) + fbnq_i(i-2);
}
main()
{
int i=1, end=1000;
printf("斐波那契数列:\n");
while(1)
{
if(fbnq_i(i)<=end)
printf("%d\t", fbnq_i(i));
else
break;
i++;
}
printf("\n");
}
#include "stdio.h"
float lrd_n(int n,float x) //递归计算n阶勒让德多项式的第 i 项的值
{
float result;
if(n==0)
return 1;
else if(n==1)
return x;
else
{
result = 1.0*((2*n-1)*x*lrd_n(n-1) - (n-1)*lrd_n(n-2))/n;
return result;
}
}
main()
{
//作业:请补充完善
}