C language recursive function implementation

//递归和非递归分别实现第n个斐波那契数
//递归:
#include<stdio.h>
#include<windows.h>
int fib(int n){
 if (n <= 2){
  return 1;
 }
 return fib(n - 1)+fib(n - 2);
}
int main(){
 printf("please input a number:");
 int a;
 scanf_s("%d", &a);
 int ret=fib(a);
 printf("%d\n", ret);
 system("pause");
 return 0;
}
//非递归
#include<stdio.h>
#include<windows.h>
int fib2(int n){
 int first=1;
 int second=1;
 int third=1;
 while (n > 2)
 {
  third = first + second;
  first = second;
  second = third;
  n--;
 }
 return third;
}
int main(){
 printf("Please input a number:");
 int a;
 scanf_s("%d", &a);
 int ret=fib2(a);
 printf("%d\n", ret);
 system("pause");
 return 0;
}
//编写一个函数实现n^k,使用递归实现
#include<stdio.h>
#include<windows.h>
int order(int n, int k){
 if (k == 0)
 {
  return 1;
 }
 else{
  return n*order(n, k - 1);
 }
}
int main(){
 printf("Please input two numbers:");
 int n;
 int k;
 scanf_s("%d", &n);
 scanf_s("%d", &k);
 int result = order(n, k);
 printf("%d\n", result);
 system("pause");
 return 0;
}
//写一个递归函数DigSum(n),输入一个非负整数,返回组成它的数字之和,例如,调用DigtSum(1729),则应该返回1+7+2+9,它的和是19
#include<stdio.h>
#include<windows.h>
int DigSum(n){
 if (n == 0){
  return 0;
 }
 return (n % 10) + DigSum(n / 10);
}
int main(){
 printf("Please input a number:");
 int n= 0;
 scanf_s
  ("%d", &n);
 int result = DigSum(n);
 printf("%d", result);
 system("pause");
 return 0;
}
//编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。
#include<stdio.h>
#include<windows.h>
void reverse_string(char *string){
 static int j;
 if (*(++string) != '\0')
 {
  reverse_string(string);
 }
 printf("%c", *(string - 1));
}
int main(){
 char str[] = { "abcdef" };
 reverse_string(str);
 printf("\n");
 system("pause");
 return 0;
}
//递归和非递归分别实现求n的阶乘
#include<stdio.h>
#include<windows.h>
int fact1(int n)
{
 if (n <= 1)
 {
  return 1;
 }
 return n*fact1(n - 1);
}
int fact2(int n){
 int result = 1;
 while (n > 1){
  result *= n;
  n -= 1;
 }
 return result;
}
int main(){
 printf("Please inpute a number:");
 int a;
 scanf_s("%d", &a);
 int res = fact1(a);
 printf("%d\n", res);
 int res2 = fact2(a);
 printf("%d\n", res2);
 system("pause");
 return 0;
}
//递归方式实现打印一个整数的每一位
#include<stdio.h>
#include<windows.h>
void print(int n)
{
 if (n > 9)
 {
  print(n / 10);
 }
 printf("%d ",n % 10);
}
int main(){
 printf("Please input a number:");
 int a;
 scanf_s("%d", &a);
 print(a);
 system("pause");
 return 0;
}
// 递归和非递归分别实现strlen
#include<stdio.h>
#include<windows.h>
int Strlen(const char *str)
{
 if (*str == '\0')
 {#endif
  return 0;
 }
 else return 1 + Strlen(str + 1);
}
int main(){
 char *p = "abcdef";
 int len = Strlen(p);
 printf("%d\n", len);
 system("pause");
 return 0;
}
#include<stdio.h>
#include<windows.h>
int Strlen(const char *str){
 int count = 0;
 while (*str != 0)
 {
  str++;
  count++;
 }
 return count;
}
int main(){
 char *str = "abcdef";
 int res = Strlen(str);
 printf("%d\n", res);
 system("pause");
 return 0;
}

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326628304&siteId=291194637