返回:贺老师课程教学链接
【项目-递归函数】
(1)立方累加和:用递归函数求
f(n)=13+23+...+n3
,要求先将
f(n)
数学表达式表示成递归的形式,然后再编程序实现。
[参考解答]
递归公式:
f(n)={1,n3+f(n−1),n=1n>1
参考程序:
#include <stdio.h>
int cube(int n);
int main()
{
int n;
scanf("%d",&n);
printf("f(n)=%d\n", cube(n));
return 0;
}
int cube(int n)
{
if (n==1)
return 1;
else
return n*n*n+cube(n-1);
}
(2)写出求
1∗3∗...∗n
的递归式,并编写出递归函数求解。
[参考解答]
递归公式:
f(n)={1,n∗f(n−2),n=1n是大于1的奇数
参考程序:
#include <stdio.h>
long f(int);
int main( )
{
int n;
long y;
printf("请输入一个数 :");
scanf("%d", &n);
if(n%2) //若奇数
y=f(n);
else
y=f(n-1);
printf("%d以内的奇数积是:%ld\n", n, y);
return 0;
}
long f(int n)
{
long s;
if (n==1)
s=1;
else
s=f(n-2)*n;
return s;
}
(3)编程序,用递归函数求出两个数的最大公约数。(包括编main函数,调用定义的递归函数)
[参考解答]
#include <stdio.h>
int gcd(int x, int y);
int main()
{
int m,n;
printf("输入两个数字:");
scanf("%d %d", &m, &n);
printf("最大公约数:");
printf("%d\n", gcd(m,n));
return 0;
}
int gcd(int a, int b)
{
int t, g;
//if (a < b) t=a,a=b,b=t; //无所谓大小
if (b==0)
g=a;
else
g=gcd(b,a%b);
return g;
}
(4)编一个程序,读入具有5个元素的实型数组,然后调用一个函数,递归地找出其中的最大元素,并指出它位置。
[参考解答]
#include<stdio.h>
int find(int a[],int n)
{
int m;
if(n==0)
return a[0];
else
{
m=find(a,n-1);
return (m>a[n]?m:a[n]);
}
}
int main()
{
int a[5],i;
for(i=0; i<5; i++)
scanf("%d",&a[i]);
printf("%d",find(a,4));
return 0;
}