切面条

来源:互联网 发布:商城首页广告设计 php 编辑:程序博客网 时间:2024/04/28 00:33

切面条

一根高筋拉面,中间切一刀,可以得到2根面条。
如果先对折1次,中间切一刀,可以得到3根面条。
如果连续对折2次,中间切一刀,可以得到5根面条。
那么,连续对折10次,中间切一刀,会得到多少面条呢?
思路:
由于对折次数仅为10,数据规模并不大,可以通过手算简单的完成。
对折0次,得到2根;
对折1次,得到2 * 2 - 1 = 3
对折2次,得到3 * 2 - 1 = 5
对折3次,得到5 * 2 - 1 = 9
对折4次,得到9 * 2 - 1 = 17
对折5次,得到17 * 2 - 1 = 33
对折6次,得到33 * 2 - 1 = 65
对折7次,得到65 * 2 - 1 = 129
对折8次,得到129 * 2 - 1 = 257
对折9次,得到257 * 2 - 1 = 513
对折10次,得到513 * 2 - 1 = 1025

普通递归

#include<stdio.h>
int fun(int n)
{
if(n==0)
return 2;
else
return 2*fun(n-1)-1;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d",fun(10));

}

尾递归

#include <stdio.h>  
  
int f2(int n, int r)
 {  
    //尾递归  
    if(n == 0) {  
        return r;  
               }
else 
{  
        return f2(n - 1, 2 * r - 1);  
     }  
}  
int main() 
{  
    printf("%d",f2(10, 2));  
    return 0;  
}  

大家想想尾递归和递归有什么区别,那么尾递归又有什么优势呢?

0 0