1.递归和非递归分别实现求第n个斐波那契数。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int fibonacci(int n){
if(n==1 || n==2){
return 1;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
int Fibonacci(int n){
int f1 = 1;
int f2 = 1;
int f3 = 0;
int i = 0;
for(i = 3;i <= n;i++){
f3 = f1+f2;
f1 = f2;
f2 = f3;
}
return f3;
}
int main(){
int n=0;
printf("请输入n:");
scanf("%d", &n);
int ret = fibonacci(n);
printf("%d\n",ret);
system("pause");
return 0;
}
2.编写一个函数实现n^k,使用递归实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h>
int Pow(int n,int k){
if (k == 0){
return 1;
}
return n*Pow(n,k-1);
}
int main(){
int n = 0;
int k = 0;
int ret = 0;
printf("请输入n k:");
scanf("%d %d", &n,&k );
ret = Pow(n,k);
printf("%d\n",ret);
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(unsigned int num){//无符号 unsingned int
if (num > 9){//多位数
return DigitSum(num / 10) + num%10;
}
return num;
}
int main(){
int n = 0;
int ret = 0;
printf("请输入一个数字:");
scanf("%d", &n);
printf("\n");
ret=DigitSum(n);
printf("%d \n", ret);
system("pause");
return 0;
}
- 编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
char* reverse_string(char* str){
int len = strlen(str);
if (len > 1) {
char temp;
temp = str[0];
str[0] = str[len - 1];
str[len - 1] = '\0';
reverse_string(str + 1);
str[len - 1] = temp;
}
return str;
}
int main(){
char str[10] = { 0 };
char ch;
printf("请输入一个字符串(10个字符以内,以换行符终止):");
for (int i = 0; i < 10; i++) {
if ((ch = getchar()) != '\n') {
str[i] = ch;
continue;
}
break;
}
printf("字符串元素为:\t");
puts(str);
reverse_string(str);
printf("倒序输出为:\t");
puts(str);
system("pause");
return 0;
}
5.递归和非递归分别实现strlen
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
int Strlen(char* n){
int count = 0;
while (*n != '\0'){
count++;
*n++;
}return count;
}
int MyStrlen(char *n){
if (*n == '\0')
{
return 0;
}
return 1 + MyStrlen(n + 1);
}
int main(){
char n[] = { 0 };
int ret = 0;
printf("请输入字符串:");
scanf("%s", n);
ret = MyStrlen(n );
printf("%d\n", ret);
system("pause");
return 0;
}
6.递归和非递归分别实现求n的阶乘
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
int Factorial(int n){
if (n != 1){
return Factorial(n -1)*n;
}
return 1;
}
int main(){
int i = 0;
int ret = 1;
int result = 1;
int n = 0;
printf("请输入n:");
scanf("%d", &n);
result = Factorial(n);
printf("%d\n", result);
for (int i = 1; i <= n; i++){
ret = ret*i;
}
printf("%d\n", ret);
system("pause");
return 0;
}
7.递归方式实现打印一个整数的每一位
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
void PrintNum(unsigned int num){//无符号 unsingned int
if (num > 9){//多位数
PrintNum(num / 10);
}
printf("%d ", num % 10);
}
void print(int num){
if (num != 0){
printf("%d", num%10);
num=num / 10;
}
}
int main(){
int num = 0;
printf("请输入一个数字:");
scanf("%d", &num);
printf("\n");
PrintNum(num);
print(num);
system("pause");
return 0;
}