请使用递归实现n!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <unistd.h>
int fun(int n)
{
if (n==0)
{
return 1;
} else
{
return n*fun(n-1);
}
}
int main(int argc, const char *argv[])
{
int n;
printf("please enter n:");
scanf("%d",&n);
int sum=fun(n);
printf("%d的阶乘是: %d\n",n,sum);
return 0;
}
请使用递归实现O-n的和
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <unistd.h>
int fun(int n)
{
if(n==0)
return 0;
else
return n+fun(n-1);
}
int main(int argc, const char *argv[])
{
int n;
printf("please enter n:");
scanf("%d",&n);
int sum=fun(n);
printf("0-%d的和是: %d\n",n,sum);
return 0;
}
请使用递归实现斐波那契
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <unistd.h>
int fun(int n)
{
if(n==1||n==2)
{
return 1;
}
else
{
return fun(n-1)+fun(n-2);
}
}
int main(int argc, const char *argv[])
{
int n;
printf("please enter n:");//n为打印的数列层数
scanf("%d",&n);
printf("斐波那契数列:");
for(int i=1;i<=n;i++)
{
printf("%d ",fun(i));
}
puts("");
return 0;
}
请使用递归实现二进制转换
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <unistd.h>
void Exchange(int n)
{
if(n==0)
{
return ;
}
else
{
Exchange(n/2);
printf("%d",n%2);
}
}
int main(int argc, const char *argv[])
{
int n;
printf("please enter n:");
scanf("%d",&n);
printf("十进制数%d转换为二进制数为:",n);
Exchange(n);
puts("");
return 0;
}
请递归实现计算各个位数字之和
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <unistd.h>
int fun(int n)
{
if(n==0)
return 0;
else
return n%10+fun(n/10);
}
int main(int argc, const char *argv[])
{
int n;
printf("please enter n:");
scanf("%d",&n);
int sum=fun(n);
printf("sum=%d\n",sum);
return 0;
}
请递归实现计算各个位数字的乘积
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <unistd.h>
int fun(int n)
{
if(n<10)
return n;
else
{
return n%10*fun(n/10);
}
}
int main(int argc, const char *argv[])
{
int n;
printf("please enter n:");
scanf("%d",&n);
int sum=fun(n);
printf("sum=%d\n",sum);
return 0;
}
请使用递归实现计算单词逆置
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <unistd.h>
//整体逆置+单词逆置
void reverseAll(char str[], int start, int end)
{
if(end-start<1)
{
return ;
}
else
{
char t=str[start];
str[start]=str[end];
str[end]=t;
reverseAll(str,start+1,end-1);
}
}
//逆置单词
void reverseWords(char str[],int len)
{
int start=0;
int end=0;
// 先逆置整个字符串
reverseAll(str,0,len-1);
// 再逆置每个单词
while (end<len)
{
// 找到原本单词的起始位置
while (end<len && str[end]==' ')
{
end++; // 跳过空格
start=end; // 更新单词的起始位置
}
// 找到原本单词的结束位置
while (end<len && str[end]!=' ')
{
end++; //移动到原本单词的末尾
}
// 逆置当前单词(不包括末尾的空格)
reverseAll(str,start,end-1);
}
}
int main(int argc, const char *argv[])
{
char str[100];
printf("Please enter str: ");
gets(str);
int len=strlen(str);
reverseWords(str,len);
printf("%s\n", str);
return 0;
}