问题描述
输入格式
输出格式
输入样例
输出样例
解题
简单题,给出两种解法。
一、考虑循环
#include<stdio.h>
int feet_num(int n){
//计数
int i = 0;
//while(true)编译通不过,故用1
while(1){
//n == 1时跳出循环
if (n == 1)
break;
//n为偶数
if (n % 2 == 0){
n /= 2;
i++;
}
//n为奇数
else{
n = (3 * n + 1) / 2;
i++;
}
}
return i;
}
int main()
{
int i;
scanf("%d", &i);
printf("%d", feet_num(i));
return 0;
}
二、考虑递归
#include<stdio.h>
int feet_num(int n){
//n == 1 为递归结束条件
if (n == 1)
return 0;
//n为偶数时
if (n % 2 == 0)
return 1 + feet_num(n / 2);
//n为奇数时
else
return 1 + feet_num((3 * n + 1) / 2);
}
int main()
{
int i;
scanf("%d", &i);
printf("%d", feet_num(i));
return 0;
}
总结
通常情况下,递归的效率会低,但其算法更抽象,更容易理解。