1.此程序运行结果:0 1 2 3 4 5 递归调用
#include<stdio.h> #include<stdlib.h> fun(int k) { if (k > 0) fun(k - 1); printf(" %d",k); } void main() { int w = 5; fun(w); printf(" "); system("pause"); }
例题2.求x的y次方
double fun(double x,int y) { double cube = 1; for(int i = 0;i < y;i++) cube = cube * x; return cube; } //用递归计算n阶乘 long factorial(int n) { if (n <= 0) return 1; else return n*factorial(n - 1); } //用迭代法计算n的阶乘 long factorial(int n) { int result = 1; while (n > 1) { result *= n; n --; } return result; }
例题3.编写一函数求四个整数的最大值。
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> void Max_value(int a, int b, int c,int d) { int max = a; if (max < b) max = b; if (max < c) max = c; if (max < d) max = d; printf("最大数是%d ", max); } void main() { int a, b, c, d; printf("输入四个整数a,b,c,d:"); scanf("%d%d%d%d", &a, &b, &c, &d); Max_value(a, b, c, d); system("pause"); }
例题4.打印出3到1100之间的全部素数(判素数由函数实现)。
#include<stdio.h> #include<stdlib.h> #include<math.h> int judgePri(int n) { for (int i = 2; i <= (int)sqrt((double)n); i++) if (n % i == 0) return 0; return 1; } void main() { for (int i = 3; i < 1100; i++) { int flag = judgePri(i); if (flag == 1) printf("%6d", i); } system("pause"); }
例题5.写一函数,使给定的一个二维数组(3×3)转置,即行列互换。
#include<stdio.h> #include<stdlib.h> void main() { int arr[3][3] = { 0 }; for (int i = 0; i<3; i++) for (int j = 0; j<3; j++) { arr[i][j] = rand() % 100; } for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { printf("%5d", arr[i][j]); } printf(" "); } for (int i = 0; i<3; i++) for (int j = i + 1; j<3; j++) { int temp = arr[i][j]; arr[i][j] = arr[j][i]; arr[j][i] = temp; } printf(" "); printf(" "); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { printf("%5d", arr[i][j]); } printf(" "); } system("pause"); }
例题6.编写计算m的n次方的递归函数。
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int fun(int m, int n) { if (n == 1) return m; else return m * fun(m, n - 1); } void main() { int m, n; scanf("%d%d", &m, &n); printf("%d", fun(m, n)); system("pause"); }
例题7.编一个程序,读入具有5个元素的整型数组,然后调用一个函数,递归计算这些元素的积。
#include<stdio.h> #include<stdlib.h> int sumA(int *p, int n) { if (n == 0) return *p; //停止条件 return a[0] else return *(p + n) * sumA(p, n - 1); } void main() { int a[] = { 8,2,3,4,5 }; int n = sizeof(a) / sizeof(int); int sum = sumA(a, n - 1); printf("%d", sum); system("pause"); }
例题8.编一个程序,读入具有5个元素的实型数组,然后调用一个函数,递归地找出其中的最大元素,并指出它位置。
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int GO(float * arr, int num) { if (num == 1) return 0; else { if (arr[num - 1] > arr[GO(arr, num - 1)]) return num - 1; else return GO(arr, num - 1); } } void main() { float arr[5] = { 0 }; for (int i = 0; i<5; i++) { scanf("%f", &arr[i]); } int num = GO(arr, 5); printf("最大元素位置:%d最大元素为:%f", num, arr[num]); system("pause"); }
例题9.被调函数分配内存给主调函数使用--堆
#include<stdio.h> #include<stdlib.h> char *Getmemory(int num) { char *p = (char *)malloc(sizeof(char) * num);//动态分配的内存都在堆上,只有自己释放 return p; } void main() { char *pstr = NULL; pstr = GetmemoryA(100); if (pstr != NULL) { strcpy(pstr, "hello world"); printf("%s", pstr); } free(pstr); //释放动态申请的内存 system("pause"); }
例题10. 1 + 2 + 3 + …… + n 用非递归与递归实现
int goN1(int n) { int result = 0; for (int i = 0; i <= n; i++) result += i; return result; } int goN2(int num) { if (num == 1) return 1; else return goN2(num - 1) + num; }
例题11.用递归与迭代法计算斐波那契数列的第n个数的值。
long fibonacci(int n) { if (n <= 2) return 1; return fibonacci(n - 1) + fibonacci(n - 2); } long fibonacci(int n) { long result; long previous_result; long next_result; result = previous_result = 1; while (n > 2) { next_result = previous_result; previous_result = result; result = previous_result + next_result; n--; } return result; }
例题12.1 + 1 * 2 + 1 * 2 * 3 + 1 * 2 * 3 * 4 …… + 1 * 2 * 3 * 4 * …… * n 双层递归
int Go(int num) { if (num == 1) return 1; else return num*Go(num - 1);//求第n项的值 } int plus(int n) { if (n == 1) return 1; else return plus(n - 1) + Go(n);//推理公式 }