一:函数递归
最简单的递归
#includeint main() { printf("hehe"); main(); return 0; }
#includevoid print(n) { if (n > 9) { print(n / 10); } return printf("%d ", n % 10); } int main() { int a; scanf("%d", &a); print(a); return 0; }
运行结果:
这里只写递归的方法:
int vet(n) { if (n == 1) return 1; return n * vet(n - 1); } int main() { int m; scanf("%d", &m); int n = vet(m); printf("%d", n); return 0; }
非递归:
#includeint Strlen (char *arr)//主函数的arr传过来是首元素的地址所以应该用指针来指向第一个字符 { int m = 0; while(*arr != '') { m++; arr++;//将地址++ } return m; } int main() { char arr[] = "abcde"; int m = Strlen(arr); printf("%d", m); return 0; }
递归:
int Strlen(char* arr) { if (*arr == '') return 0; else return 1 + Strlen(arr + 1); } int main() { char arr[] = "abcde"; int m = Strlen(arr); printf("%d", m); return 0; }
#includevoid reverse_string(char* string) { if(*string != '') { reverse_string(string+1); } printf("%c", (*string)--);//注意用指针,因为string只是一个地址 } int main() { char arr[] = "abcde"; reverse_string(arr); return 0; }
运行结果:
#includeint DigitSum(int m) { if(m >9) { return DigitSum(m / 10)+m%10; } return m; } int main() { int m = 0; scanf("%d", &m); int sum = DigitSum(m); printf("%d", sum); return 0; }
编写一个函数实现n的k次方,使用递归实现。
#includeint powe(n, k) { if(k>0) return n * powe(n, k - 1); return 1; } int main() { int n,k; scanf("%d%d",&n, &k); int m=powe(n, k); printf("%d的%d次方是%d", n, k, m); return 0; }
递归和非递归分别实现求第n个斐波那契数
递归:
#includeint fib(int n) { if (n <= 2) { return 1; } else { return fib(n - 1) + fib(n - 2); } } int main() { int n; scanf("%d", &n); int m = fib(n); printf("第%d个斐波那契数是%d", n, m); return 0; }
非递归:
int fib(int n) { int s1 = 1,s2 = 1; int sum = 1; if (n <= 2) { return 1; } else { for (int i = 3; i <=n; i++) { sum = s1 + s2; s1 = s2; s2 = sum; } return sum; } } int main() { int n; scanf("%d", &n); int m = fib(n); printf("第%d个斐波那契数是%d", n, m); return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)