程序代码:
#include<stdio.h>
//1.递归实现求第n个feibonaq数
int fib(int n){
if(n>0){
if(n==1 ||n==2){
return 1;
}
return fib(n-1)+fib(n-2);
}
}
//2.非递归实现求第n个feibonaq数
int fib1(int n){
int arr[n];
arr[0]=arr[1]=1;
int i =2;
for(;i<n;++i){
arr[i] = arr[i-1] +arr[i-2];
}
return arr[n-1];
}
void TextFib(){
printf("\n**************%s***************\n",__FUNCTION__);
int ret = fib1(5);
int ret1 = fib1(5);
printf("except: 5, actual:%d\n",ret1);
printf("except: 5, actual:%d\n",ret);
return;
}
//3.编写一个函数实现n^k,使用递归实现
int achieve(int value,int n){
if(n == 0){
return 1;
}
if(n == 1){
return value;
}
return value*achieve(value,n-1);
}
void TextAchieve(){
printf("\n**************%s***************\n",__FUNCTION__);
int ret = achieve(2,5);
printf("ret = %d\n",ret);
}
//4.写一个递归函数DigitSum(n),输入一个
//非负整数,返回组成的数字之和,例如,
//调用DigitSum(1729),则应该返回1+7+2+9,
//它的和是19
int DigitSum(int value){
if(value<10){
return value;
}
return value%10+DigitSum(value/10);
}
void TextDigitSum(){
printf("\n**************%s***************\n",__FUNCTION__);
int value = 1927;
printf("value = %d\n",value);
int ret = DigitSum(value);
printf("ret = %d\n",ret);
return;
}
//5.编写一个函数reverse_string(char* string)
//(递归实现)
//实现:将参数字符串中的字符反向排列。
//要求:不能使用c函数库中的字符串操作函数
void reverse_string(char* string){
int i=0;
char* cur = string;
while(*string++ !='\0'){
++i;
}
int arr[i];
int j=0;
for(;j<i;j++){
arr[j] = cur[j];
}
int k = i;
i--;
for(j=0;j<i;i--,j++){
char tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
for(j=0;j<k;j++){
printf("%c ",arr[j]);
}
}
void TextReverse_string(){
printf("\n**************%s***************\n",__FUNCTION__);
char* string = "abcdefg";
printf("string: %s\n",string);
reverse_string(string);
printf("\n");
return;
}
//6.递归和非递归实现strlen
//递归实现
int my_strlen(char* str){
if(*str=='\0'){
return 0;
}
str++;
return 1+my_strlen(str);
}
int my_strlen1(char* str){
int i=0;
while(*str++ != '\0'){
i++;
}
return i;
}
void Textmy_strlen(){
printf("\n**************%s***************\n",__FUNCTION__);
char* str = "abcde";
printf("str = %s\n",str);
int ret = my_strlen(str);
int ret1 = my_strlen1(str);
printf("ret: except:5 actual:%d\n",ret);
printf("ret1: except:5 actual:%d\n",ret1);
return;
}
//7.递归和非递归实现求n的阶乘
//递归实现
int Factorial(int n){
if(n==0||n==1){
return 1;
}
return n*Factorial(n-1);
}
//非递归实现
int Factorial1(int n){
int ret = 1;
while(n){
ret = ret*n;
n--;
}
return ret;
}
void TextFactorial(){
printf("\n**************%s***************\n",__FUNCTION__);
int n = 5;
int ret = Factorial(n);
int ret1 = Factorial1(n);
printf("ret: except:120, actual:%d\n",ret);
printf("ret1: except:120, actual:%d\n",ret1);
return;
}
void print(int value){
if(value<10){
printf("%d\n",value);
return;
}
printf("%d ",value%10);
print(value/10);
}
void TextPrint(){
printf("\n**************%s***************\n",__FUNCTION__);
int value = 100;
print(value);
return;
}
//主函数
int main(){
TextPrint();
TextFib();
TextAchieve();
TextDigitSum();
TextReverse_string();
Textmy_strlen();
TextFactorial();
}