一、递归实现求第n个斐波那契数
#include <stdio.h> int fib(int n) { if(n<=2) { return 1; } else { return fib(n-1)+fib(n-2); } } int main() { int n = 0; scanf("%d",&n); pirntf("%d",bib(n)); } //方法二、循环法 int fib2(int n) { int a = 1; int b = 1; int c = 1; while (n > 2) { c = a + b; a = b;
二、编写一个函数实现n的k次方,使用递归实现。
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int square(int n,int k) { if (k == 1) { return n; } else { return n * square(n,k - 1); } } int main() { int n = 0; int k = 0; printf("输入n的k次方(n,k)"); scanf("%d,%d", &n, &k); printf("%d", square(n, k));
三、写一个递归函数,输入一个非负整数,返回组成它的数字之和
#include <stdio.h> int DigitSum(unsigned int n) { if (n > 9) { return n%10+DigitSum(n / 10); } else { return n % 10; } } int main() { int n = 0; scanf("%d", &n); printf("%d", DigitSum(n)); }
四、编写一个函数 reverse_string(char * string)(递归实现)实现:将参数字符串中的字符反向排列,不是逆序打印。要求:不能使用C函数库中的字符串操作函数。
#include <stdio.h> int my_strlen(char* str) { if (*str != '\0') { return 1 + my_strlen(str + 1); } return 0; } void reverse_string(char* string) { char temp; if (*string == '\0') { return; } else { int len = my_strlen(string); char temp = *string; string[0] = string[len - 1]; string[len - 1] = '\0'; reverse_string(string + 1); string[len - 1] = temp; } } int main() { char str[] = { "dafklafak" }; reverse_string(str); printf("%s", str); }
五、递归实现strlen
#include <stdio.h> //递归实现模拟strlen int my_strlen(char* str) { if (*str != '\0') { return 1+my_strlen(str + 1); } return 0; } int main() { char str[] = "asdfsdfsa"; int len = my_strlen(str); printf("%d", len); }
六、 递归和非递归分别实现求n的阶乘
#include <stdio.h> //递归非递归实现n的阶乘 int fac(int n)//递归 { if (n == 0) { return 1; } else { return n * fac(n - 1); } } int fac1(int n) {//非递归 int num = 1; while (n > 0) { num *= n; n--; } return num; } int main() { int n = 0; scanf("%d", &n); printf("%d\n", fac(n)); printf("%d\n", fac1(n)); }
七、递归方式实现打印一个整数的每一位
#include <stdio.h> void print(int n) { if (n > 9) { print(n / 10); } printf("%d\n", n % 10); } int main() { int n = 0; scanf("%d", &n); print(n); }