函数与递归

题单介绍

# 函数与递归 ### 什么是函数? - 系统函数 pow(a,b) $a^b$ sqrt(n) $\sqrt{n}$ sort(a+1,a+n+1) 排序 - 自定义函数 $$ n!=1\times 2\times 3\dots\times n $$ ```cpp int jc(int n) { int sum = 1; for (int i = 1; i <= n ; i ++ ) sum*= i ; return sum; } ``` - 判断质数 ```cpp bool isprime(int x) { if (x<2) return false; if (x==2) return true; if (x%2==0) return false; for (int i = 3;i*i <= x ; i += 2) if (x%i==0) return false; return true; } ``` - 十进制转其他进制 ```cpp string tentoother(int n,int k) { string str = ""; while (n>0) { if (n%k<10) str = char(48+n%k)+str; else str = char(55+n%k) + str; n/=k; } return str; } ``` - 其他进制转十进制 ```cpp int othertoten(int k,string str) { int sum = 0 ; for (int i = 0 ; i < str.size() ; i ++ ) { sum*= k; if (str[i]>='A') sum += str[i]-'A'+10; else sum += str[i]-48; } return sum; } ``` - 判断回文数 ```cpp bool pdhw(string str) { string res = str; reverse(res.begin(),res.end()); return res == str; } ``` ```cpp bool pdhw(string str) { int l = 0 , r = str.size()-1; while (l<=r) { if (str[l]==str[r]) l ++, r--; else return false; } return true; } ``` ### 无返回值的函数(过程) ## 递归 将原问题拆分成更小的子问题,子问题还可以继续拆分直到可以直接解决。 ### 例题1:阶乘问题 $$ f(n)=n!=1\times 2\times 3\dots\times n $$ $$ f(n)=f(n-1)\times n $$ ```cpp int f(int n) { if (n==1) return 1; return f(n-1)*n; } ``` ### 例题2:斐波那契问题(爬楼梯问题) 递推:是顺向思维 递归:是逆向思维 如果你在n层,你上一步可能在哪些层?$n-1,n-2$. $$ f(n)=f(n-1)+f(n-2),f(1)=1,f(2)=2 $$ ```cpp int f(int n) { if (n==1||n==2) return n; return f(n-1)+f(n-2); } ```

题目列表

  • [NOIP 2003 普及组] 栈
  • Function
  • 数楼梯
  • [NOIP 2002 普及组] 过河卒
  • [NOIP 2001 普及组] 数的计算