1130 C语言 递归&&没用搜索

#include <stdio.h>
#include <stdlib.h>
int f(int x);
int j=0;
int main()
{
int i,n;
scanf("%d",&n);
f(n);
printf("%d",j+1);
return 0;
}

int f(int x)
{
int i;
if(x==0||x==1)
return 1;
for(i = 1;i<=x/2;i++)
{
j++;
f(i);
}
}

详解!

当输入了n,就执行f(n),如果是0||1就二话没说返回1;如果不是,就从n的一半开始找。找一次记一次数(即j++),然后递推执行 f 函数, i 经过循环已经等于x/2,(即for(i = 1;i<=x/2;i++)),正好给 f 函数,也就给是 f 函数的变量 x 。即x=x/2。再执行 f 函数,再判断,if 不返回就再找……最后一层返回 1 ,这不理解也无妨,反正此题我们要的是计数。

比如:输入6,第一次结束后i=3,j=3(for循环了3次),第二次开始时x=x/2=3,i=1,j=3;结束时x=x/2,i=2,j=3+2=5,第三次开始时x=x/2=1,if 判断返回1,在输出时,不要忘了+1.

0 条评论

目前还没有评论...

信息

ID
1130
难度
2
分类
递推 点击显示
标签
递交数
7063
已通过
4163
通过率
59%
被复制
29
上传者