c语言算法问题?

#include<stdio.h>intf(inta,intb){if(a!=0){a--;b++;f(a,b);}elsereturnb;}voidmain(){pri... #include<stdio.h>
int f(int a,int b)
{
if(a!=0)
{
a--;
b++;
f(a,b);
}
else return b;
}
void main()
{
printf("%d\n",f(3,4));
}
想知道为什么这么写可以实现加法,多层函数最内层的return能return到主函数里?
展开
 我来答
鲁叶291
高能答主

2020-08-19 · 用力答题,不用力生活
知道小有建树答主
回答量:3191
采纳率:0%
帮助的人:115万
展开全部
C语言中三个常见算法问题

1.辗转相除法
2.整数求逆
3.二分搜索
1.辗转相除法

求最大公约数
// 代码如下
int u,v;
scanf("%d %d",&u,&v);
while(v!=0)
{
int temp=u%v;
u=v;
v=temp;
}
printf("%d",u);
1
2
3
4
5
6
7
8
9
分析
(1)如果v=0,计算结束,u就是最大公约数
(2)如果v不等于0,那么计算u除以v的余数,让u=v,而v等于那个余数
(3)返回第一步
2.整数求逆

若要求原数每位都要输出
// 例:700输出007
int x;
scanf("%d",&x);
int digit;
while(x>0)
{
digit=x%10;
printf("%d",digit);
x/=10;
}
1
2
3
4
5
6
7
8
9
原数每位不必输出
//例:700输出7
int x;
scanf("%d",&x);
int digit;
int ret=0;
while(x>0)
{
digit=x%10;
ret=ret*10+digit;
x/=10;
}
printf("%d",ret);
1
2
3
4
5
6
7
8
9
10
11
分析
(1)对x变量做%10操作,得到它的个位数
(2)再对x变量做/10操作,去掉它的个位数
(3)做一个while循环对前两步进行循环,循环条件在x变量大于零的情况下进行
3.二分搜索

用于已排好序的多个数字
//这里数组已知
int arr[]={1,3,5,7,8,9};
int k;
scanf("%d",&k);
int left=0;
int right=len-1;
int ret;
while(right>left)
{
int mid=(left+right)/2;
if(arr[mid]==k)
{
ret=mid;
break;
}else if(arr[mid]>k)
{
right=mid-1;
}else{
left=mid+1;
}
}
printf("%d",arr[ret]);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一剑出血
高粉答主

2020-08-19 · 醉心答题,欢迎关注
知道大有可为答主
回答量:5.7万
采纳率:78%
帮助的人:1.7亿
展开全部
并不是return到主函数里,而是return到被调用的地方。
在这个例子里,主函数调用了 printf() 函数,而 printf() 函数的参数之一就是 f() 函数的运行结果。因此实际过程是在主函数里先调用 f() 函数,并将其结果作为参数传递给 printf() 函数并调用。
更多追问追答
追问
我是问这个递归为什么合法,只有最内层的return了个结果,但是它的上一层递归并没有对其return的这个值做处理,而结果是这个最内层return的值被主函数的printf获取到了。是因为同名函数吗
追答
嗯,我明白你的意思了,在没有明确return值的情况下,返回的到底是什么值呢?
我做一下试验。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
GTA小鸡
高粉答主

2020-08-19 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.6万
采纳率:78%
帮助的人:1.3亿
展开全部
这个代码是错的,函数在if分支中没有返回值。
能正常运行只是运气好。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式