1.递归和非递归分别实现求第n个斐波那契数。
递归法:
#include<stdio.h>
#include<stdlib.h>
int Dizeng(int n){
if (n == 1 || n == 2){
return 1;
}if (n > 2){
return Dizeng(n - 1) + Dizeng(n - 2);
}
}
int main(){
printf("%d\n", Dizeng(1));
system("pause");
return 0;
}
非递归法:
#include<stdio.h>
#include<stdlib.h>
int Feibo(int n){
if (n == 1 || n == 2){
return 1;
}
int num1 = 1;
int num2 = 1;
int i = 1;
int sum = 0;
for (i = 3; i <= n; ++i){
sum = num1 + num2;
num1 = num2;//将num1表示第二项,num2表示第三项
num2 = sum;
}
return sum;
}
int main(){
printf("%d\n", Feibo(7));
system("pause");
return 0;
}
2.编写一个函数实现n^k,使用递归实现
#include<stdio.h>
#include<stdlib.h>
int Function(int n ,int k){
if (n > 0 && k == 0){
return 1;
}
if (n > 0 && k == 1){
return n;
}
if (n > 0 && k > 1){
return n*Function(n, k-1);//调用原函数,实现
}
}
int main(){
int a, b;
printf("请输入两个大于0的数:\n");
scanf("%d %d", &a, &b);
printf("%d\n", Function(a, b));
system("pause");
return 0;
}
- 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
#include<stdio.h>
#include<stdlib.h>
int DigitSum(int n){
int i;
if (n >= 0 && n < 10){
return n;
}if (n>9){
i = n % 10;//求出第一次的个位数
n = n / 10;//将多位数除以10变成一个比原来少一位的数。
}
return i + DigitSum(n);//递归实现对每一位数字进行求和。
}
int main(){
int n;
printf("请输入一个大于0的数字:\n");
scanf("%d", &n);
printf("%d\n", DigitSum(n));
system("pause");
return 0;
}
- 编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
int reverse_string(char* string){
if (*string == '\0'){
printf("%c", *string);
}
else{
reverse_string(++string);//输出下一个字符
printf("%c\n", *(--string));//这块相当于是先把string算完,然后进行打印。
}
}
int main(){
reverse_string("abcdefg");
system("pause");
return 0;
}
5.递归和非递归分别实现strlen
递归法:
#include<stdio.h>
#include<stdlib.h>
int Strlen(const char* str){
if (*str == '\0'){
return 0;
}
else{
return 1 + Strlen(str + 1);
}
}
int main(){
/*char *p = "andjash";
int len = Strlen(p);*/
printf("%d\n", Strlen("hehhe"));
system("pause");
return 0;
}
非递归法:
#include<stdio.h>
#include<stdlib.h>
int Strlen(const char* str){
int count = 0;//计数法实现strlen函数
while (*str != '\0'){
++count;
++str;
}
return count;
}
int main(){
printf("%d\n",Strlen("hehe"));
system("pause");
return 0;
}
6.递归和非递归分别实现求n的阶乘
递归法:
#include<stdio.h>
#include<stdlib.h>
int Factor(int n){
if (n == 1){
return 1;
}if (n > 1){
return n*Factor(n - 1);
}
}
int main(){
Factor(5);
printf("%d\n", Factor(5));
system("pause");
return 0;
}
非递归法:
#include<stdio.h>
#include<stdlib.h>
int Factor(int n){
int result = 1;
for (int i = 1; i <= n; i++){
result *= i;
}
return result;
}
int main(){
Factor(5);
printf("%d\n", Factor(5));
system("pause");
return 0;
}
7.递归方式实现打印一个整数的每一位
#include<stdio.h>
#include<stdlib.h>
int Hanshu(int x){
if (x > 9){
Hanshu(x / 10);
}
printf("%d ", x % 10);
}
int main(){
int a;
scanf("%d", &a);
Hanshu(a);
system("pause");
return 0;
}