Work_7
递归和非递归分别实现求第n个斐波那契数。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> //非递归 int Fib1(int input){ if (input == 1 || input == 2){ return 1; } int first = 1; int second = 1; int number = 0; for (int i = 3; i <= input; i++){ number = first + second; first = second; second = number; } return number; } //递归 int Fib2(int input){ if (input == 1 || input == 2){ return 1; } return Fib2(input - 1) + Fib2(input - 2); }
int main(){ int input; printf("请输入所求的为第几个斐波那契数:"); scanf("%d", &input);
//非递归 printf("%d(非递归)\n", Fib1(input));
//递归 printf("%d(递归)", Fib2(input));
printf("\n"); system("pause"); return 0; }
编写一个函数实现n^k,使用递归实现。
#define _CRT_SECURE_NO_WARNINGS #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(){ int n, k; printf("请输入计算式(n ^ k)中的n与k的值:\n"); scanf("%d %d", &n, &k); printf("%d",Pow(n, k)); printf("\n"); system("pause"); return 0; }
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int DigitSum(int input){ if (input < 9){ return input; } return input % 10 + DigitSum(input / 10); } int main(){ int input; printf("请输入一个非负整数:\n"); scanf("%d", &input); while (input < 0){ printf("输入格式错误,请重新输入:\n"); scanf("%d", &input); } printf("%d", DigitSum(input)); printf("\n"); system("pause"); return 0; }
编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> void Reverse_string(char* string){ if (*string == '\0'){ return; } Reverse_string(string + 1); printf("%c", *string); } int main(){ char input[100]; printf("请输入少于100的字符串:\n"); scanf("%s", input); Reverse_string(input); printf("\n"); system("pause"); return 0; }
递归和非递归分别实现strlen。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> //非递归 int Strlen1(char* str){ int count = 0; //法一 while (*str != '\0'){ count++; str = str + 1; } ////法二 ////str[count] => *(str +count) //while (str[count] != '\0'){ // count++; //} return count; } //递归 int Strlen2(char* str){ if (*str == '\0'){ return 0; } return 1 + Strlen2(str + 1); } int main(){ char input[100]; printf("请输入少于100的字符串:\n"); scanf("%s", input); //非递归 printf("%d(非递归)\n", Strlen1(input)); //递归 printf("%d(递归)", Strlen2(input)); printf("\n"); system("pause"); return 0; }
递归和非递归分别实现求n的阶乘。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> //非递归 int Fac1(int input){ int sum = 1; for (int i = input; i > 0; i--){ sum = sum * i; } return sum; } //递归 int Fac2(int input){ if (input == 1){ return input; } return input * Fac2(input - 1); } int main(){ int input; printf("请输入n的阶乘中的n:\n"); scanf("%d", &input); //非递归 printf("%d(非递归)\n", Fac1(input)); //递归 printf("%d(递归)", Fac2(input)); printf("\n"); system("pause"); return 0; }
递归方式实现打印一个整数的每一位。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> void Number(int input){ //按个、十、百……打印 printf("%d ", input % 10); if (input > 9){ Number(input / 10); } return; ////按百、十、个……打印 //if (input < 9){ // printf("%d ", input); // return; //} //Number(input / 10); //printf("%d ", input % 10); } int main(){ int input; printf("请输入一个整数:\n"); scanf("%d", &input); Number(input); printf("\n"); system("pause"); return 0; }