数据结构是学习编程路上的重要一步,也为以后学习算法打下基础,数据结构又称算法与数据结构,与算法密不可分,是计算机软件专业的核心课程,其重要性不言而喻。
递归分为递推与回归两个过程,递归的优点是容易理解,方便编程,可以解决很多问题,缺点是需要不断的调用递归,时间效率慢,空间占用大。
递归示例:
# include <stdio.h> int f(int n) { //printf("1"); n = f(n); return n; //return f(n); //递归,必须设置一个终止条件,即必须在一定条件下执行return语句,否则将无限递归。 } //递归的数值必须是变动的,可增可减,但必须有一个上下限,达到上下限后递归终止返回,其递归的规模始终是递减的。 int g(int n) { if (n > 9) printf("哈哈!\n"); else n = g(n+1); //值增大,规模在减小。 return n; } int main(void) { int m, n; m = f(5); printf("%d\n", m); n = g(5); printf("%d\n", n); return 0; }
# include <stdio.h> void f(); void g(); void k(); //函数间的互相调用及其返回顺序 int main(void) { f(); return 0; } void f() { printf("FFFF\n"); g(); printf("1111\n"); } void g() { printf("GGGG\n"); k(); printf("2222\n"); } void k() { printf("KKKK\n"); }
# include <stdio.h> void f(); int main() { f(); return 0; } void f() { printf("哈哈!\n"); f(); } //进行递归所用的栈满后,溢出,程序出错而停止。 //递归不能出现死递归,必须设置递归结束的条件。
# include <stdio.h> void f(int); void g(int); int main(void) { return 0; } //f函数与g函数间接调用自己 void f(int n) { g(n); } void g(int m) { f(m); } //k函数直接调用自己 void k(int val) { k(val-1); }
# include<stdio.h> int f(int n) { if (1 == n) return 1; else return f(n-1) + n; //n与前一个结果的和 } int main(void) { int i, val; int sum; printf("请输入自然数求和上限:val = "); scanf("%d", &val); sum = f(val); printf("求和结果为:sum = %d\n", sum); return 0; }
# include <stdio.h> void hannuota(int, char, char, char); int main(void) { int n; char ch1 = 'A'; char ch2 = 'B'; char ch3 = 'C'; printf("请输入盘子的个数:"); scanf("%d", &n); hannuota(n, ch1, ch2, ch3); return 0; } void hannuota(int n, char A, char B, char C) { if (1 == n) { printf("将编号为%d的盘子直接从%c柱子移到%c柱子。\n", n, A, C); } else { hannuota(n-1, A, C, B); printf("将编号为%d的盘子直接从%c柱子移到%c柱子。\n", n, A, C); hannuota(n-1, B, A, C); } }
阶乘(循环实现):
递归与循环在一定程序上可以互相实现的。
# include <stdio.h> int main(void) { int val; int i; int mult = 1; printf("请输入阶乘上限数字:val ="); //注意,当输入数字过大时,结果显示为0,因为栈溢出。 scanf("%d", &val); //用循环实现阶乘 for (i=1; i<=val; ++i) { mult = mult*i; } printf("%d的阶乘结果是:%d\n", val, mult); return 0; }
# include <stdio.h> //用递归实现 long f(long n) { if (1 == n) return 1; //递归是一个规模不断缩小的计算,必须设置达到最小值时的返回值。 else return f(n-1) * n; } //n的解决必须借助n-1的结果,不断递减,最后回归。 //递归分为递推与回归两个方面。 int main(void) { int i, val; long mult; printf("请输入阶乘数字上限:val = "); scanf("%d", &val); mult = f(val); printf("%d的阶乘结果是:%ld\n", val, mult); return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/lfhappypain/article/details/47292351