题意:输入n,表示有1~n个数,任意选定一个数number,则可以将所有大于等于该数的所有数减去number,问最小需要多少步能将所有数减为0.
思路:找规律。比如n=5.1,2,3,4,5 都减去3以后为{1,2,0,1,2},这时候就相当于求n=2时的最小步数。即f(5) = f(2) + 1.
#include<stdio.h>
int dfs(int n)
{
if(n == 0)
return 0;
else
return 1+dfs(n/2);
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",dfs(n));
}
return 0;
}
递归求解最小步数问题

本文介绍了一个数学问题的解决方法,通过递归算法找出将1到n的数列全部减为0所需的最小步数。对于任意选定的一个数number,每一步操作将所有大于等于number的数减去number,直到所有数变为0。文章提供了完整的C语言代码实现。
2万+

被折叠的 条评论
为什么被折叠?



