首页 > 试题广场 >

设有递归算法如下,最终打印结果是() #includest

[单选题]
设有递归算法如下,最终打印结果是()
#include<stdio.h>
 int foo(int a ,int b)
 {
     if (b == 0) return 0;
     if (b % 2 == 0) return foo(a+a,b/2);
     return foo(a+a,b/2)+a;    
 }
 int main()
 { 
   printf("%d", foo(1,3));
   return 0;
 }


  • 3
  • 4
  • 5
  • 6
foo(1,3)=foo(2,int(1.5))+1=foo(2,1)+1
foo(2,1)=foo(4,0)
foo(4,0)=0


发表于 2020-11-14 10:26:52 回复(0)
计算foo(1,3):此时a=1,b=3;
跳过两个if语句进入return foo(1+1,3/2)+1,即foo(2,1)+1;
计算foo(2,1):
同样,跳过两个if语句进入return foo(2+2,1/2)+2,即foo(4,0)+2;
计算foo(4,0):
进入第一个if语句,return 0;
逐层返回,得foo(2,1)=0+2=2;
再返回上一层,得foo(1,3)=2+1=3;
返回结果,foo(1,3)=3;
编辑于 2019-03-12 20:50:37 回复(3)
编译都过不了
发表于 2019-04-02 17:00:32 回复(4)
注意b是整数,那么3/2等于1
发表于 2019-11-19 21:30:04 回复(0)
foo(1,3)=foo(2,1)+1
=[foo(4,0)+2]+1
=3
发表于 2022-10-05 15:35:17 回复(0)
f(1,3) 跳过两个if,f(2,1)+1
f(2,1)跳过两个if,f(4,0)+2
f(4,0)=0
即为3
发表于 2021-09-04 19:44:22 回复(0)
C语言“/”是四舍五入
发表于 2020-08-07 15:57:54 回复(0)
两数求积
发表于 2019-03-26 10:23:06 回复(0)