递归函数的分段错误

ihm*_*ihm 1 c++ g++

我只是想测试一下.我想知道我做错了什么?

   #include <iostream>
   using namespace std;
   unsigned long pwr(unsigned long n, unsigned long m)
   {
          if(m == 0)
            n = 1;
          if(m == 1)
            n = n;
          n = pwr(n, m/2) * pwr(n, m/2);
          return n;
   }

   int main ()
   {
          unsigned long n(2), m(16);
          cout << pwr(n, m);
          return 0;
   }
Run Code Online (Sandbox Code Playgroud)

输出是

Segmentation fault
Run Code Online (Sandbox Code Playgroud)

Lol*_*4t0 7

递归没有退出.

你可能想要

          if(m == 0)
             n = 1;
          else if(m == 1)
             n = n;
          else 
             n = pwr(n, m/2) * pwr(n, m/2);
          return n;
Run Code Online (Sandbox Code Playgroud)