返回:贺老师课程教学链接
【项目-递归函数】 (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; } 相关资源:C语言程序设计电子课件——函数.PPT