1.求第n个斐波那契数2.编写一个函数实现n^k3.输入一个非负整数返回组成它的数字之和4.将参数字符串中的字符反向排列5.实现strlen6.求n的阶乘7.打印一个整数的每一位

    xiaoxiao2021-04-15  306

    1.求第n个斐波那契数 1.1. 递归方法

    #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int fib(int n) { if (n <= 2) return 1; else return fib(n - 1) + fib(n - 2); } int main() { int a; int ret = 0; printf("查询第n个斐波那契数\n"); scanf("%d",&a); ret = fib(a); printf("%d ",ret); system("pause"); return 0; }

    1.2非递归

    #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int fib(int n) { int a = 1; int b = 1; int c = 0; while (n > 2) { c = a + b; a = b; b = c; n--; } return c; } int main() { int a; int ret = 0; printf("查询第n斐波那契数\n"); scanf("%d", &a); ret = fib(a); printf("%d", ret); system("pause"); return 0; }

    2.编写一个函数实现n^k,使用递归实现

    #include<stdio.h> #include<stdlib.h> int pow(int n, int k) { if (k <= 1) { return n; } return n * pow(n,k - 1); } int main() { printf("%d\n", pow(2,3)); system("pause"); return 0; }

    3.写一个递归函数DigitSum(n),输入一个非负整数, 返回组成它的数字之和。 例如调用函数DigitSum(1792),则应该返回1+7+9+2,它的和是19。

    #include<stdio.h> #include<stdlib.h> int DigitSum(int n) { if (n) { return n % 10 + DigitSum(n / 10); } return 0; } int main() { printf("%d\n", DigitSum(1792)); system("pause"); return 0; }

    4.编写一个函数reverse_string(char*string)(递归实现) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数

    #include<stdio.h> #include<stdlib.h> int mystrlen(char *str) { if (*str == 0) { return 0; } return 1 + mystrlen(str + 1); } void reverse_string(char*str) { int len = mystrlen(str); char tmp; if (*str) { tmp = str[0]; str[0] = str[len - 1]; str[len - 1] = 0; reverse_string(str + 1); str[len - 1] = tmp; } } int main() { char a[] = "pig"; reverse_string(a); puts(a); system("pause"); return 0; }

    5.递归和非递归分别实现strlen. 5.1递归

    #include<stdio.h> #include<stdlib.h> int mystrlen(char *str) { if (*str == 0) { return 0; } return 1 + mystrlen(str + 1); } int main() { printf("%d", mystrlen("tianjia")); system("pause"); return 0; }

    5.2非递归

    #include<stdio.h> #include<stdlib.h> int mystrlen(char *str) { int count = 0; while (*str) { count++; str++; } return count++; } int main() { printf("%d", mystrlen("tianjia")); system("pause"); return 0; }

    6.递归和非递归分别实现求n的阶乘 6.1递归

    #include<stdio.h> #include<stdlib.h> int mul(int n) { if (n <= 1) { return 1; } return n*mul(n - 1); } int main() { printf("%d\n", mul(3)); system("pause"); return 0; }

    6.2非递归

    #include<stdio.h> #include<stdlib.h> int mul(int n) { int i = 1; int sum = 1; for (i = 1; i <= n; i++) { sum*=i; } return sum; } int main() { printf("%d\n", mul(3)); system("pause"); return 0; }

    7.递归方式实现打印一个整数的每一位。

    #include<stdio.h> #include<stdlib.h> void print(int n) { if (n) { print(n / 10); } printf("%d", n % 10); } int main() { int num = 1234; print(num); system("pause"); return 0; }

    最新回复(0)