using namespace std
void reverse(int *a,int n) //反转的函数:参数a是数组首地址,n是数缓指组的个数
{
int *pa=a //保存传入的数组地址
int tempn=n //保存传入的数组个数
if(n==1)//圆旦如果只剩一个数,直接打印就可以
{
cout<<*a<<" " //打印这一个数
}
else if(n==2) //如果只剩两个数,也直接倒着打印就可以
{
cout<<*(a+1)<<" " //打印第二个数
cout<<*a<<" " //打印第一个数
}
else//如果剩了超过2个数,就得再次递归计算了
{
cout<<*(a+n-1)<<" "//先打印此需要反转的数组的最橘哪扰后一个数
reverse(pa+1,n-2) //进入递归去计算去掉第一个数和最后一个数的数组的反转
cout<<*a<<" " //最后打印此需要反转的数组的第一个数
}
}
int main() //主函数
{
int a[7]={1,2,3,4,5,6,7}//一个实例数组
reverse(a,7) //调用反转函数
return 0 //正确执行完毕会返回值0给 *** 作系统
}
我已经发给你邮箱了;
main(){ printf("%d\n", f1(4))
printf("%d\n", f2(4))//这里两个换行
f3(123)//第三行
printf("缓态配\n")
f4(123)/扰指/第四行
printf("\闭宽n")
}
f3(123)是取余 依次为3,f(12)2,f(1)1,f(0)
最后返回头打印 所以是321
f(4)是if(n/10 != 0) f4(n/10)
一直在执行这个语句 所以if不满足时才执行printf("%d", n%10)
所以是和f(3)顺序相反输出
以下是使用递归算法实现上述程序的C语言代码:#include <stdio.h>
float sum(int n) {
if (n == 0) { // 基本情况
return 0
} else {
float s = 0
for (int i = 1i <= ni++) { // 计算1/1+2+3+...+n
s += i
}
return sum(n-1) + 1/s // 递归调用
}
}
int main() {
int n
printf("请输入n的值:")
scanf("%d", &n)
printf("sum = %.2f\n", sum(n))
return 0
}
在这个递归函数中,我们使用嫌巧源了一个基本情况,即当n等于0时,返回0作为递归的终止条芹态件。在其他情况下,我们使用for循环计算1/1+2+3+...+n的值,然后通过递归宽察调用求解sum(n-1),最后将两个结果相加。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)